C++0x 11
■ このスレッドは過去ログ倉庫に格納されています
0519デフォルトの名無しさん
2010/11/06(土) 20:58:00class ptr {
int *p;
public:
ptr() : p(new int) {}
ptr(ptr const& y) : p(new int(*y.p)) {}
ptr& operator =(ptr const& y) {ptr(y).swap(*this); return *this;}
~ptr() {delete p;}
void swap(ptr& y) {std::swap(p, y.p);}
};
こんなよくありそうなクラスにムーブ構築・代入を定義する場合、
パッと考えつくだけでも2とおりある(ここでは代入で書いたけど、コンストラクタでも同じ)。
ptr& operator =(ptr&& y) {
swap(y);
return *this;
}
ptr& operator =(ptr&& y) {
delete p;
p = y.p;
y.p = nullptr;
return *this;
}
ムーブした後、yがどうなっているか違うけど、どっちでもムーブとしての挙動は行われるはず。
もちろん、yはデストラクタが呼ばれても問題ないのも同じ。
こういう話でいいのかな。
■ このスレッドは過去ログ倉庫に格納されています