Boost総合スレ part7at TECH
Boost総合スレ part7 - 暇つぶし2ch106:デフォルトの名無しさん
09/02/16 22:34:08
スマートポインタを昨日から触り始めました。
これはokなのに、
boost::scoped_ptr<string> s( new string("foo") );

これはコンパイル出来ない仕組みなのはなぜ?
boost::scoped_ptr<string> s;
s = new string("foo");

たとえばコンストラクタの中でinit関数を呼んで
その中でポインタ初期化したい場合とかどうすればいいんだ

107:デフォルトの名無しさん
09/02/16 22:40:20
s.reset(new string("foo"));

108:デフォルトの名無しさん
09/02/16 22:40:21
>>106
s.reset(new string("foo"));

109:デフォルトの名無しさん
09/02/16 23:18:39
>>106
ひとつのポインタを別々のshared_ptrに代入してはいけないのでポインタを=で代入できないようにしている。newしたらすぐにスマートポインタにセットさせるのが基本。
スマートポインタをスマートポインタに=を使って代入は可能のでこれを使って共有する。


110:デフォルトの名無しさん
09/02/17 00:07:42
shared_ptrだと
boost::scoped_ptr<string> x;
boost::scoped_ptr<string> y( new string("foo") );
x = y;

scoped_ptrだと
x.reset(new string("foo"));

と理解しました。
init関数でresetって違和感ありますが、こういうものなのでしょうか。
scoped_ptrを初期化子リストでnewしない場合は
設計を見直した方がいいのかな


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch