我想在 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);