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
。
ただし、 forは単にである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);