62

次の違いは何ですか:

std::shared_ptr<int> p = std::shared_ptr<int>( new int );

std::shared_ptr<int> p = std::make_shared< int >();

?

どちらを優先する必要がありますか? その理由は?

PSこれはすでに回答されているに違いありませんが、同様の質問が見つかりません。

4

3 に答える 3

22

en.cppreference.comから

対照的に、宣言std::shared_ptr<T> p(new T(Args...)) は少なくとも 2 つのメモリ割り当てを実行するため、不要なオーバーヘッドが発生する可能性があります。

さらに、f(shared_ptr<int>(new int(42)), g()) g が例外をスローすると、メモリ リークが発生する可能性があります。make_shared を使用すると、この問題は発生しません。

したがってmake_shared、可能であればアプローチをお勧めします。

于 2013-08-18T17:03:45.980 に答える