コピー(一時オブジェクト)を作成せず、ポインタの移動しようというもの
移動されたオブジェクトは破壊される(関数の戻り値等の右辺値は破壊しても全く問題ないでしょ)
一時オブジェクトを作らないので、より高速で無駄のないプログラミングができるようになる
struct string { // copy semantics string(const string& s) : data_(new char[s.size_]), size_(s.size_) { memcpy(data_, s.data_, size_); } string& operator=(const string& s) { if (this != &s) { if (size_ < s.size_) // get sufficient data buffer size_ = s.size_; memcpy(data_, s.data_, size_); } return *this; } // move semantics string(string&& s) : data_(s.data_), size_(s.size_) { s.data_ = 0; s.size_ = 0; } string& operator=(string&& s) { swap(s); return *this; } private: char* data_; size_t size_; };
C++0xでは、この拡張に合わせSTL(標準ライブラリ)を総書き換えする予定
ただでさえ速いSTLが、さらに速くなります
【詳細はこちら】
イグトランスの頭の中(のかけら) - ムーブセマンティクスと右辺値参照