#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
是调用用户定义的移动构造函数的唯一方法?