【初心者歓迎】C/C++室 Ver.66【環境依存OK】at TECH
【初心者歓迎】C/C++室 Ver.66【環境依存OK】 - 暇つぶし2ch16:デフォルトの名無しさん
09/05/28 21:40:28
>>15
暗黙の変換を避けるため、コンストラクタがexplicitになっている。

こんなとき
void f(scoped_ptr<hoge> const&, int);
int g();

f(new f, g());の評価順序は決まっていないのだが、
もしnew hoge→g呼出→scoped_ptr一時オブジェクト生成→f呼出の順だったら、
g()が例外を投げると、new hogeに対するdeleteが呼ばれなくなる。
そこでf(new f, g());がエラーになるようexplicitが使われている。
=で初期化できなくなる弊害より安全性が優先されたということ。
なお、f(scoped_ptr<hoge>(new f), g());とすればコンパイルできるが、だめぜったい。


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