c++ - 禁用 move 构造函数

标签 c++ c++11 move

我想禁用类中的 move 构造函数。我不想 move ,而是基于复制构造函数。当我尝试编写这段代码时:

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

如何禁用 move 构造函数并改为强制复制?

最佳答案

不创建任何 move 构造函数:

class Boo
{
public:
    Boo(){}
    Boo(const Boo& boo) {};
};

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

关于c++ - 禁用 move 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35405771/

相关文章:

c++ - 为什么基于锁的程序不能组成正确的线程安全片段?

c++ - 使用非专用模板化类型作为模板参数

jquery - 在页面其余部分之前加载 Logo ,然后 move 到静止位置并显示其余内容

jquery - 调整窗口大小时 move 图像或向上划分?

c++ - 将仅将构造函数 move 到 vector 的对象推回

java - 将 Java 嵌入到 C++ 应用程序中?

c++ - 如何使用多态参数动态调用函数

c++ - 如何使用三元运算符创建指向多态类的唯一指针?

c++ - 无法通过 cv::imshow() 显示窗口。我错过了什么?

c++ - 非阻塞套接字多线程接收模型