13

在下面显示的代码中,如何将右值分配给函数 main 中的对象 A?

#include <iostream>

using namespace std;

class A
{
    public:
        int* x;
        A(int arg) : x(new int(arg)) { cout << "ctor" << endl;}
        A(const A& RVal) { 
            x = new int(*RVal.x);
            cout << "copy ctor" << endl;
        }
        A(A&& RVal) { 
            this->x = new int(*RVal.x);
            cout << "move ctor" << endl;
        }
        ~A()
        {
            delete x;
        }
};

int main()
{
    A a(8);
    A b = a;
    A&& c = A(4); // it does not call move ctor? why?
    cin.ignore();
    return 0;
}

谢谢。

4

1 回答 1

15

任何命名实例都是左值。

带有移动构造函数的代码示例:

void foo(A&& value) 
{
   A b(std::move(value)); //move ctr
}

int main()
{
    A c(5); // ctor
    A cc(std::move(c)); // move ctor
    foo(A(4)); 
}
于 2012-01-05T09:18:12.090 回答