C++0x 3
at TECH
[
2ch
|
▼Menu
]
■コピペモード
□
スレを通常表示
□
オプションモード
□このスレッドのURL
■項目テキスト
900:デフォルトの名無しさん 08/06/18 22:38:24 >>892 d = std::move(s); という構文が実行された直後の s の状態が明確に定義されていなければならないですが, この状態は有効な状態でなければならず,かつ, いかなるリソースの所有権も保持していないような状態でなければならないです. これを valid resourceless state と表現していました. 有効な状態 (valid) でなければならないというのは, move された直後の s に対しての操作が well-defined でなければならないという要請を表現したものです. 少なくとも最低限かつ自明の要求として,いかなるタイミングでも デストラクタの発動は有効に機能しなければならない,という意味で 有効な状態でなければならないことは分かるかと思います. また, move は no-fail,つまり失敗しない操作であることが要求されます. ここで仮に move 直後の s が何らかのリソースの所有権を保持した状態であるとすると s が保持するリソースの確保において失敗が発生する可能性があり, move が no-fail であるという要求と矛盾します. 従って, s はいかなるリソースの所有権も保持していない状態 (resourceless) である必要が出てきます. 一般に,オブジェクトが常に何らかのリソースを確保している状態であることが自然な場合, このようなオブジェクトに move の操作が行えることを要求すると, オブジェクトの構築は完了しているがリソースの確保が完了していない オブジェクトの状態を有効な状態としてユーザに暴露しなければならなくなり, RAII の観点から見てやや大きな弱点を生じるように思います.
次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
レスジャンプ
mixiチェック!
Twitterに投稿
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch
5389日前に更新/166 KB
担当:undef