如何调用移动构造函数?

时间:2012-01-05 09:09:41

标签: c++ move-constructor

在下面的代码中,如何为函数main中的对象A分配rvalue?

#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;
}

感谢。

1 个答案:

答案 0 :(得分:7)

任何命名实例都是l值。

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

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)); 
}