是否有任何方法可以隐式生成仅移动类的移动构造函数?假设有这样一个类:
class moveable_only
{
unique_ptr<int> p_;
};
moveable_only m;
foo(std::move(m));这不编译,因为隐式声明的复制构造函数不能复制p_。(12.8/7)
如果类定义没有显式声明副本构造函数,则将隐式声明一个副本构造函数。如果类定义声明了一个移动构造函数或移动赋值操作符,则隐式声明的复制构造函数被定义为已删除;否则,它被定义为defaulted (8.4)。
现在考虑这一点:
class moveable_only
{
unique_ptr<int> p_;
moveable_only(const moveable_only&);
moveable_only& operator = (const moveable_only&);
};
moveable_only m;
foo(std::move(m));这也不能编译,因为12.8/9
如果类X的定义没有显式声明移动构造函数,则将隐式声明为defaulted当且仅当 -X没有用户声明的复制构造函数, -X没有用户声明的副本赋值操作符, -X没有用户声明的移动赋值操作符, -x没有用户声明的析构函数,并且 -移动构造函数不会被隐式定义为已删除。
发布于 2012-11-21 15:54:04
这不编译,因为隐式声明的复制构造函数不能复制p_。(12.8/7)
不需要复制构造函数。这并不能编译,因为编译器似乎不会自动生成一个移动构造函数,而它应该这样做。
除了自己实现它或更新编译器之外,没有别的办法。
https://stackoverflow.com/questions/13496956
复制相似问题