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

ただし、 forは単にであるstd::unique_ptr<char*>ためT、を初期化することはできません。std::unique_ptr<T>::pointerT*

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 に答える