- C++相談室 part121 [無断転載禁止]©2ch.net
443 :デフォルトの名無しさん[sage]:2015/12/26(土) 04:41:01.32 ID:S13iTXsn - vector<shared_ptr<T>> list; があるとして、これの要素のconst参照を
const shared_ptr<T>& ref = list[0]; のように取ると、listに要素を追加した際に 参照先がおかしくなるのですが、何故こうなるんでしょうか? https://ideone.com/3YLbwe
|
- C++相談室 part121 [無断転載禁止]©2ch.net
445 :デフォルトの名無しさん[sage]:2015/12/26(土) 05:51:14.92 ID:S13iTXsn - >>444
それは知ってましたが、移動に応じて参照先も追従してくれるのかと思ってました ・・・よく考えたらするわけないですよね なんかこういう勘違いをしてる時点でC++をよく分かってないのが明らかですねorz あと、shared_ptr自体は本問題には全く関係ない話ですね スレ汚し失礼しました
|
- C++相談室 part121 [無断転載禁止]©2ch.net
469 :443[sage]:2015/12/26(土) 17:48:27.63 ID:S13iTXsn - >>457
const shared_ptr<T>& ref と参照にした理由は、shared_ptr自体のコピーコストを嫌ったためです (その意味では仰るとおりconst付けるのは無意味でした) 同じ考えで、範囲for文では for (auto& ref : list) と参照で受けるのが半ば習慣になってました これってforの中でlistの再配置が起こるような処理をしてたら大変なことになってたってことですよね やばすぎる・・・orz 自分のようなアホは安全のためにも、shared_ptrを受けるときは問答無用でコピーにしたほうがいい気が
|