アカウント名:
パスワード:
規格(23.2.2.3)によるとlistのerase, pop_front, pop_back, clearは削除される要素へのイテレータしか無効化しないと書かれています。removeも同様です。spliceでは、移動元範囲に含まれるイテレータは無効化されます。その範囲外のイテレータには何の影響もありません。
C++では、大きなオブジェクトの設計にはpimplイディオムを用い、併せてswapメンバ関数を実装するのが普通です。それが難しいなら、shared_ptrのようなスマートポインタのコンテナとします。しかし当該イテレータを無効化しても良いならspliceを代用としても問題ないでしょう。
大変参考になるコメントをありがとうございます。
> C++では、大きなオブジェクトの設計にはpimplイディオムを用い、併せてswapメンバ関数を実装するのが普通です。
世の中にはトホホな現場が数多くあっても、先端の方ではさらに進化が進んでいるのですね。コメントをしていただけたおかげで「C++ イディオム」でググった先にいろいろ出てきた内容を知るきっかけができました。ありがとうございます。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
ナニゲにアレゲなのは、ナニゲなアレゲ -- アレゲ研究家
May the Concept be with you (スコア:1)
規格(23.2.2.3)によるとlistのerase, pop_front, pop_back, clearは削除される要素へのイテレータしか無効化しないと書かれています。removeも同様です。
spliceでは、移動元範囲に含まれるイテレータは無効化されます。その範囲外のイテレータには何の影響もありません。
C++では、大きなオブジェクトの設計にはpimplイディオムを用い、併せてswapメンバ関数を実装するのが普通です。それが難しいなら、shared_ptrのようなスマートポインタのコンテナとします。しかし当該イテレータを無効化しても良いならspliceを代用としても問題ないでしょう。
That is not dead which can eternal lie,
And with strange æons, even death may die.
Re:May the Concept be with you (スコア:1)
大変参考になるコメントをありがとうございます。
> C++では、大きなオブジェクトの設計にはpimplイディオムを用い、併せてswapメンバ関数を実装するのが普通です。
世の中にはトホホな現場が数多くあっても、先端の方ではさらに進化が進んでいるのですね。コメントをしていただけたおかげで「C++ イディオム」でググった先にいろいろ出てきた内容を知るきっかけができました。ありがとうございます。