c++ - 公共(public)删除或私有(private)默认构造函数/分配/复制构造函数?

标签 c++ c++11 default-constructor

如果我想禁止复制构造/分配,那么是:

class foo
{
public:
   foo(const foo&) = delete;
   foo& operator = (const foo&) = delete;
};

等同于:

class foo
{
private:
   foo(const foo&) = default;
   foo& operator = (const foo&) = default;
};

哪种方法是正确的?为什么?

最佳答案

正确的方法是第一个解决方案:复制构造函数和赋值运算符未定义,因此任何使用它们的尝试都不会编译。

class foo
{
public:
   foo(const foo&) = delete;
   foo& operator = (const foo&) = delete;
};

第二个是将隐式生成的表单声明并定义私有(private):

  • foo 类型的对象允许复制自身。
  • 任何友元类或方法也可以复制 foo

所以复制构造/赋值仍然是可能的。

您还可以使用 boost::noncopyable作为基类,它与 c++11 完全相同(请参阅源代码 here )

关于c++ - 公共(public)删除或私有(private)默认构造函数/分配/复制构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26338369/

相关文章:

c++ - 如何确保我们从 boost::child 进程中读取所有行

c++ - 使用 Qt5 在 Windows 上获取 HWND(来自 WId)

c++ - 有没有一种很好的方法来实现具有默认失败情况的条件类型?

java - 为什么私有(private)构造函数禁止继承?

c++ - 链接错误与编译错误

c++ - 字符串到字节的转换

c++ - 带有 std::thread 和 this 的 ctor 初始值设定项列表

templates - 模板: Using partial templates gives wrong number of arguments error

c++ - 如何在 getline 中使用 stringstream 构造函数?

java - 如何添加默认构造函数