我想在char指针上使用唯一指针。我需要知道在哪些情况下需要将删除函数传递给unique_ptr。
std::unique_ptr<char[]> pChar(new char [size])
和
std::unique_ptr<char*> pChar(new char [size])
我猜对于char [],编译器会调用delete [],但是char *?
呢由于
答案 0 :(得分:2)
对于char[]
编译器选择std::default_delete<char[]>
,实际调用delete[]
,char*
编译器选择std::default_delete<char*>
,实际调用delete
。< / p>
但是,在尝试时,您无法初始化std::unique_ptr<char*>
,因为对于T
,std::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);