c – 禁用移动构造函数

我想在类中禁用移动构造函数.而不是移动,我想基于复制构造函数.当我尝试编写此代码时:

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) {};
};

只要存在用户定义的复制构造函数,就不会自动生成移动构造函数,因此会调用复制构造函数.

转载注明原文:c – 禁用移动构造函数 - 代码日志