如果我想禁止复制构建/分配,则为:
class foo
{
public:
foo(const foo&) = delete;
foo& operator = (const foo&) = delete;
};
与:
相同class foo
{
private:
foo(const foo&) = default;
foo& operator = (const foo&) = default;
};
哪种方法正确?为什么?
答案 0 :(得分:4)
正确的方法是第一种解决方案:没有定义复制构造函数和赋值运算符,因此任何使用它们的尝试都不会编译。
class foo
{
public:
foo(const foo&) = delete;
foo& operator = (const foo&) = delete;
};
第二个是将隐式生成的表单声明为并定义为private
:
foo
的对象自行复制。foo
因此,复制构造/作业仍然可以。
您也可以使用boost::noncopyable
作为基类,它与c ++ 11完全相同(参见源代码here)