WEB开发网
开发学院软件开发VC VC10中的C++0x特性 part 2(2):右值引用 阅读

VC10中的C++0x特性 part 2(2):右值引用

 2009-06-10 20:07:41 来源:WEB开发网   
核心提示: private: int * m_p;};class remote_point {public: remote_point(const int x_arg, const int y_arg) : m_x(x_arg), m_y(y_arg) { } remote_point(remote_

private:

    int * m_p;
};

class remote_point {

public:

    remote_point(const int x_arg, const int y_arg)
        : m_x(x_arg), m_y(y_arg) { }

    remote_point(remote_point&& other)
        : m_x(Move(other.m_x)),
          m_y(Move(other.m_y)) { }

    remote_point& operator=(remote_point&& other) {
        m_x = Move(other.m_x);
        m_y = Move(other.m_y);
        return *this;
    }

    int x() const { return m_x.get(); }
    int y() const { return m_y.get(); }

private:

    remote_integer m_x;
    remote_integer m_y;
};

remote_point five_by_five() {
    return remote_point(5, 5);
}

remote_point taxicab(const int n) {
    if (n == 0) {
        return remote_point(1, 1728);
    }

    remote_point ret(729, 1000);

    return ret;
}

int main() {
    remote_point p = taxicab(43112609);

    cout << "(" << p.x() << ", " << p.y() << ")" << endl;

    p = five_by_five();

    cout << "(" << p.x() << ", " << p.y() << ")" << endl;
}

C:Temp>cl /EHsc /nologo /W4 /O2 point.cpp
point.cpp

C:Temp>point
Unary constructor.
Unary constructor.
MOVE CONSTRUCTOR.
MOVE CONSTRUCTOR.
Destructor.
Destructor.
(729, 1000)
Unary constructor.
Unary constructor.
MOVE ASSIGNMENT OPERATOR.
MOVE ASSIGNMENT OPERATOR.
Destructor.
Destructor.
(5, 5)
Destructor.
Destructor.

现在你看到啦,按成员移动(memberwise move)是很容易做到的。注意, remote_point 的 move 赋值函数没有进行自我赋值检查,是因为 remote_integer 已经检查过了。也要注意到 remote_point 隐式声明的拷贝构造函数,拷贝赋值函数和析构函数都正常运作。

到现在,你应该对 move 语意已经非常熟悉了。(希望不是抓狂啊!)为了测试你新获得的这个不可思议的技能,请为前面的例子写一个 +() 操作符函数当作练习吧。

最后的提醒:只要你的类支持 move 语意,你就应该实现 move 构造函数和 move 赋值函数。因为不仅仅是你平常使用这些类时可从 move 语意中获利, STL 容器和算法也能从中获利,通过廉价的 move 省下昂贵的拷贝开销。

来源:vcblog 作者:Stephan T. Lavavej

系列文章:

VC10中的C++0x特性 Part 1:Lambdas,auto,以及 static_assert

VC10中的C++0x特性 Part 2 (1):右值引用

VC10中的C++0x特性 Part 2 (3):右值引用

VC10中的C++0x特性 part 3 :声明之类型

上一页  1 2 3 4 5 6 

Tags:VC 特性 part

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接