つい今しがた初めてstd::auto_ptr_refの存在とその存在意義を知った.というか,これってmove semanticsの文脈で必ず出てくる話だにゃ.std::auto_ptrにも同じ機構があるのは知らなかった.というかstd::auto_ptrにもなければおかしいのだけれど.move_ptrはこのstd::auto_ptr_refからstd::auto_ptrへのコンストラクタしか許さず,所有権の移動を明示的な構文で書こう,というモチベーションだと思えば良いんだろうな,多分.
ちなみにこの手のmove semantics周りのトリックをColvin-Gibbons trickと呼ぶらしい.
参考
- ISO/IEC IS 14882 (20.4.5) - 規格書の該当部分.
- C++標準ライブラリチュートリアル&リファレンス (ASCII Addison Wesley Programming Series) - std::auto_ptr_refに関する記述がチラッとだけある.該当する部分は以下のリソースからも閲覧可能.
- http://www.josuttis.com/libbook/auto_ptr.html - 上の書籍の該当箇所と同じ内容.
- http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#127
- http://www.open-std.org/jtc1/sc22/wg21/docs/papers/1997/N1128.ps
Colvin-Gibbons trickちぅ名前は上の2つから来てるんだろうにゃあ,多分.
- http://www.awprofessional.com/content/images/020163371X/autoptrupdate/auto_ptr_update.html - 旧バージョンのstd::auto_ptrから新バージョンのstd::auto_ptrへの変更点を挙げている.これ読むとstd::auto_ptr_refが何故必要なのかが分かる.
- http://home.comcast.net/~jturkanis/move_ptr/ - ここのdocumentはmove semanticsに関するモチベーション等が非常に良くまとめられていて分かりやすい.