2013-04-30 56 views
2

我想在字符指针上使用唯一的指针。我需要知道在哪些情况下需要将deleter函数传递给unique_ptr。字符指针的删除函数

std::unique_ptr<char[]> pChar(new char [size]) 

而且,

std::unique_ptr<char*> pChar(new char [size]) 

我想对于char [],编译器会调用delete [],但对于字符*?

感谢

回答

2

对于char[]编译器选择std::default_delete<char[]>,实际调用delete[],为char*编译器选择std::default_delete<char*>,实际调用delete

但是,你不能初始化td::unique_ptr<char*>,当你尝试,因为对于Tstd::unique_ptr<T>::pointer简直是T*

您可以使用这样的事情,但我认为smart_pointer到指针,这是非常奇怪的

char* pp = new char[1]; 
    auto deleter = [](char** p) { delete[] *p; }; 
    std::unique_ptr<char*, decltype(deleter)> p(&pp, deleter); 
+0

在的std :: default_delete ,怎么会知道编译直到它需要删除的内容大小的情况下。它的行为和免费一样,对吧? – Yogi 2013-04-30 09:09:03

+0

为什么不使用数组专业化而不是提供删除器? – 2013-04-30 09:12:11