在C++中的常见模式是使复制构造私人:是一个私人移动构造函数来防止移动?
class A
{
public:
// ...
private:
A(const A&);
};
但是将以下代码然后编译(在C++ 11/14):
A f();
auto a = f();
标准包含的信息关于自动生成移动构造函数。我既没有访问标准,也没有实际生成移动构造函数的编译器。我的问题是:是否必须写
class A
{
public:
// ...
private:
A(const A&);
A(const A&&);
};
防止移动(以及操作员=类似)?
如果你写了一个拷贝构造函数,它不会生成一个移动构造函数。 –
用户声明的副本禁止生成移动成员。 – Xeo
请注意,您提到的模式是针对C++ 98/03的,但现在在C++ 11中已弃用,这要感谢“delete”构造函数/赋值运算符(例如'ClassName(ClassName &&)= delete; '显式地阻止隐式移动构造函数)。 – syam