読者です 読者をやめる 読者になる 読者になる

C++0x - 右辺値参照(Rvalue reference) / ムーブ・セマンティクス(Move semantics)

コピー(一時オブジェクト)を作成せず、ポインタの移動しようというもの


移動されたオブジェクトは破壊される(関数の戻り値等の右辺値は破壊しても全く問題ないでしょ)

一時オブジェクトを作らないので、より高速で無駄のないプログラミングができるようになる

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が、さらに速くなります



【詳細はこちら】
イグトランスの頭の中(のかけら) - ムーブセマンティクスと右辺値参照



C++0x言語拡張まとめ