公共删除或私人默认ctor / assignment / copy ctor?

时间:2014-10-13 10:57:35

标签: 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;
};

哪种方法正确?为什么?

1 个答案:

答案 0 :(得分:4)

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

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

第二个是将隐式生成的表单声明为并定义private

  • 允许类型为foo的对象自行复制。
  • 还允许任何朋友类或方法复制foo

因此,复制构造/作业仍然可以

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