禁用移动构造函数
Disabling move constructor
我想在 class 中禁用移动构造函数。我不想移动,而是基于复制构造函数。当我尝试编写此代码时:
class Boo
{
public:
Boo(){}
Boo(const Boo& boo) {};
Boo(Boo&& boo) = delete;
};
Boo TakeBoo()
{
Boo b;
return b;
}
在编译期间我收到错误:
error C2280: 'Boo::Boo(Boo &&)': attempting to reference a deleted function
如何禁用移动构造函数并改为强制复制?
不创建任何移动构造函数:
class Boo
{
public:
Boo(){}
Boo(const Boo& boo) {};
};
只要存在用户定义的复制构造函数,就不会自动生成移动构造函数,因此会调用复制构造函数。
将一个函数标记为=delete
使该函数可用于重载解析,但如果选择,编译将失败;此功能不限于构造函数和其他特殊函数 (see here)。以前(大约 C++03)使成员私有获得了类似的结果。
因此,示例中的代码实际上意味着您禁止从临时值或过期值(右值)- 移动构造函数构造 class 的对象。
要更正此问题,请完全删除移动构造函数。在 class 的情况下,一旦存在复制构造函数(用户定义),无论如何都不会隐式生成移动(移动构造函数和移动赋值运算符)。
class Boo
{
public:
Boo(){}
Boo(const Boo& boo) {};
//Boo(Boo&& boo) = delete;
};
我想在 class 中禁用移动构造函数。我不想移动,而是基于复制构造函数。当我尝试编写此代码时:
class Boo
{
public:
Boo(){}
Boo(const Boo& boo) {};
Boo(Boo&& boo) = delete;
};
Boo TakeBoo()
{
Boo b;
return b;
}
在编译期间我收到错误:
error C2280: 'Boo::Boo(Boo &&)': attempting to reference a deleted function
如何禁用移动构造函数并改为强制复制?
不创建任何移动构造函数:
class Boo
{
public:
Boo(){}
Boo(const Boo& boo) {};
};
只要存在用户定义的复制构造函数,就不会自动生成移动构造函数,因此会调用复制构造函数。
将一个函数标记为=delete
使该函数可用于重载解析,但如果选择,编译将失败;此功能不限于构造函数和其他特殊函数 (see here)。以前(大约 C++03)使成员私有获得了类似的结果。
因此,示例中的代码实际上意味着您禁止从临时值或过期值(右值)- 移动构造函数构造 class 的对象。
要更正此问题,请完全删除移动构造函数。在 class 的情况下,一旦存在复制构造函数(用户定义),无论如何都不会隐式生成移动(移动构造函数和移动赋值运算符)。
class Boo
{
public:
Boo(){}
Boo(const Boo& boo) {};
//Boo(Boo&& boo) = delete;
};