5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

C++相談室 part97

114 :デフォルトの名無しさん:2012/08/01(水) 10:00:54.97
>>111
vector<T>(n), vector::resize(n) について。

C++03 では (n, value) と同じオーバーロードがデフォルト引数 T() で呼び出されて
value の n 個のコピーからなる vector が得られた。
(ただし resize(n) は呼び出し前からあった要素はそのままね。)

C++11 での右辺値参照導入に際して、おそらくこれらの操作がそのままだと
CopyConstructible を要求することになってしまって理不尽な要求や無駄なコピーを
生じてしまうことから、 DefaultConstructible だけで使えるようにそれぞれ n だけを
受け取るオーバーロードが追加されて n 個それぞれ個別に初期化された要素からなる
vector が得られるようになった。

この変更によって、例えば >>75 のように T が内部に shared_ptr を持つような
オブジェクトの場合の shared_ptr の use_count(), unique() などについて
vector<T>(n) などの結果が変わることになってしまった。

252 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50


read.cgi ver 05.04.09 2022/06/21 Walang Kapalit ★
FOX ★