C++ shared_ptrの使い方

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Yak

C++ shared_ptrの使い方

#1

投稿記事 by Yak » 7年前

shared_ptrを初めて使ったのですが、使い方が今一つ分からなかったので、質問させていただきます。

まず書き方なのですが、

コード:

std::shared_ptr<Hoge> fuga = std::shared_ptr<Hoge>(new Hoge());
であっているのでしょうか?見慣れないせいなのか少し変な書き方のように見えてしまい、あっているのか不安です

また、調べていてもmake_sharedの方が多く書かれていて、shared_ptrの説明が少ないように感じました。

違いが分からないので、この2つの何が違うのかも教えていただけたら幸いです。

どうぞよろしくお願いいたします。

アバター
V30
記事: 21
登録日時: 11年前
住所: 岡山県

Re: C++ shared_ptrの使い方

#2

投稿記事 by V30 » 7年前

どちらでも同じような感じですが、安心・安全のため make_shared を使うのが常套です。

[参考]
https://msdn.microsoft.com/ja-jp/library/ee410595.aspx

解説にバッチリ書いていますよ。
素人的な質問は、素人に聞こう!

危ない危ない。
ちゃんとした人に質問しましょう。
ちなみに私は、ちゃんとしていない素人です。

かずま

Re: C++ shared_ptrの使い方

#3

投稿記事 by かずま » 7年前

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 で領域を解放しますから、効率が良くなります。

Yak

Re: C++ shared_ptrの使い方

#4

投稿記事 by Yak » 7年前

回答ありがとうございました。

make_haredの方を勉強して使っていきたいと思います^^

返信

“C言語何でも質問掲示板” へ戻る