Yak さんが書きました:
コード:
std::shared_ptr<Hoge> fuga = std::shared_ptr<Hoge>(new Hoge());
であっているのでしょうか?見慣れないせいなのか少し変な書き方のように見えてしまい、あっているのか不安です
間違ってはいませんが、通常は次のように書きます。
コード:
std::shared_ptr<Hoge> fuga(new Hoge());
Yak さんが書きました:
また、調べていてもmake_sharedの方が多く書かれていて、shared_ptrの説明が少ないように感じました。
違いが分からないので、この2つの何が違うのかも教えていただけたら幸いです。
shared_ptrオブジェクトは、Hogeオブジェクトへのポインタと、
参照カウントオブジェクトへのポインタを持ちます。
shared_ptr のコンストラクタは、
参照カウントオブジェクトを new して、それを保持します。
引数で渡された Hogeオブジェトへのポインタも保持します。
デストラクタで、参照カウントオブジェクトの delete と
Hogeオブジェクトの delete を実行します。
make_shared で shared_ptrオブジェクトを生成すると、
一つの new で、Hogeオブジェクトと参照カウントオブジェクトの
領域を確保します。そして、shared_ptr のデストラクタでは、
一つの delete で領域を解放しますから、効率が良くなります。