2017-07-17 28 views

答えて

4

状況の1つは、std::make_sharedがカスタムディテクタの指定をサポートしていないことです。

std::shared_ptrコンストラクタとは異なり、std::make_sharedではカスタムディテクタが許可されていません。

std::shared_ptrのコンストラクタでのみ実行できます。

std::shared_ptr<Foo> sh5(new Foo, [](auto p) { 
    std::cout << "Call delete from lambda...\n"; 
    delete p; 
}); 

別の問題は、リンクされたポストは説明と同様であり、制御ブロックとオブジェクトの両方のための唯一の割り当てstd::make_sharedを行うが指さ。つまり、オブジェクトが破棄された後、そのオブジェクトが占有していたメモリはすぐに解放されない可能性があります。メモリ使用量に問題が生じる可能性があります。

2

プライベートコンストラクタ(シングルトンパターン)でクラスを宣言すると、make_sharedを使用して構築できませんでしたが、shared_ptrキャストを使用できます。

関連する問題