2

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

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

和,

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

我猜对于 char[],编译器会调用 delete [],但是 char* 呢?

谢谢

4

1 回答 1

2

对于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);
于 2013-04-30T09:04:30.307 回答