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