gpt4 book ai didi

c++ - 公共(public)删除或私有(private)默认 ctor/assignment/copy ctor?

转载 作者:搜寻专家 更新时间:2023-10-31 01:02:53 24 4
gpt4 key购买 nike

如果我想禁止复制构造/赋值那么是:

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)默认 ctor/assignment/copy ctor?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26338369/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com