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しない場合は
設計を見直した方がいいのかな