Herb Sutter は Exceptional C++ で次のように書いていauto_ptr
ます。
問題は、auto_ptr のコピーが同等ではないため、auto_ptr がコンテナーに入れることができる型の要件を完全に満たしていないことです。
この本は C++03 に関して書かれていますが、このコードは GCC 4.7.1 で完全にコンパイルされるように見えるため、これがまだ有効かどうか疑問に思います。
#include <vector>
struct Foo
{
Foo() { }
Foo( Foo&& ) { }
Foo( Foo& ) = delete;
Foo& operator= (Foo&&) { return *this; }
Foo& operator= (Foo&) = delete;
};
int main()
{
std::vector<Foo> bar;
bar.push_back(Foo());
}
しかし、移動可能だがコピー不可能なオブジェクトを受け入れることも、GCC の拡張機能になる可能性があります。私はわかりません。std::vector
オブジェクトの要件は何ですか?