如果我想禁止复制构造/分配,那么是:
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/