C++ shared_ptrの使い方

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

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: C++ shared_ptrの使い方

Re: C++ shared_ptrの使い方

#4

by Yak » 7年前

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

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

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

Re: C++ shared_ptrの使い方

#2

by V30 » 7年前

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

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

解説にバッチリ書いていますよ。

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つの何が違うのかも教えていただけたら幸いです。

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

ページトップ