如何让用户定义移动构造函数称为

时间:2019-06-03 08:29:11

标签: c++11 move

#include <iostream>
#include <cstdlib>

using namespace std;

class c
{
    public:
        c(){ cout << "Default ctor" << endl; }
        c(const c& o) { cout << "Copy ctor" << endl; }
        c(c&& o){ cout << "move copy ctor" << endl; }   // Line 11
        //c(c&& o) = delete;                            // Line 12
        ~c() { cout << "Destructor" << endl; }
};

int main()
{
    c o = c();                                          // Line 18
    c p = std::move(c());
    return 0;
}

这段代码产生以下输出。

Default ctor
Default ctor
move copy ctor
Destructor
Destructor
Destructor

但是,如果我停用第11行并激活第12行,那么它会给出以下编译时错误。

prog.cc: In function 'int main()':
prog.cc:18:13: error: use of deleted function 'c::c(c&&)'
   18 |     c o = c();
      |             ^
prog.cc:12:9: note: declared here
   12 |         c(c&& o)=delete;
      |         ^

表示第18行调用了编译器提供的移动副本构造函数。如何在不使用std::move的情况下调用第11行中的用户定义的移动构造函数?

还是std::move是调用用户定义的移动构造函数的唯一方法?

0 个答案:

没有答案