std::shared_ptr
を使用せずに を作成した後、カスタムのデリータを使用することは可能new
ですか?
new
私の問題は、オブジェクトの作成がファクトリ クラスによって処理され、そのコンストラクタとデストラクタが保護されているため、コンパイル エラーが発生し、その欠点のために使用したくないことです。
詳しく説明すると、次のような共有ポインターを作成することを好みます。これにより、カスタムのデリータを設定できなくなります (と思います)。
auto sp1 = make_shared<Song>(L"The Beatles", L"Im Happy Just to Dance With You");
または、次のように作成することもできます。これにより、met は引数を介してデリータを設定できます。
auto sp2(new Song, MyDeleterFunc);
しかし、2番目のものは を使用しますnew
。これは、私の知る限り、一番上の種類の割り当てほど効率的ではありません。
たぶん、これはより明確です:make_shared<>
カスタムのデリータと同様の利点を得ることは可能ですか? それは、アロケータを書かなければならないということでしょうか?