gpt4 book ai didi

c++ - boost::noncopyable 是如何工作的

转载 作者:太空狗 更新时间:2023-10-29 20:54:29 27 4
gpt4 key购买 nike

我在 C++ 实践中偶然发现了 2 个愚蠢的问题:

  1. C++ 中的 AFAIK 复制构造函数和赋值运算符不是继承的...那么在这种情况下 boost::noncopyable 如何帮助禁止这些东西?

    class X: private boost::noncopyable{};
    是否必须只使用私有(private)继承来达到目的?

  2. 是否只有一种声明赋值运算符的方法

    MyClass& operator= ( const MyClass & );
    申报
    void operator= ( const MyClass & ); 
    是一样的吗或
    const MyClass& operator= ( const MyClass & );
    ?

最佳答案

不可复制在 C++11 及更高版本中将通过声明它 =delete 来工作,最好是 public。然而,在 C++11 之前,这是不可能的,并且正在使用 2 种技术的组合:

  • 将方法声明为私有(private)
  • 不实现该方法

通过将方法设为私有(private),非友元类无法调用它。因此,任何试图调用它的代码都将导致编译错误。

实际上,类仍然可以复制自身。因此,此方法不会实现,您将收到链接器错误。

继承自 boost::noncopyable 将阻止第二个用例,但是,它也会阻止编译器生成有效的默认复制构造函数……因为它们会违反前面的约束。

请注意,如果您确实需要,可以通过调用这些“不可复制”类的普通构造函数来为继承类编写复制构造函数。

对于你的第二个问题:是的,你可以给它任何你想要的返回类型,尽管你不能再写 a = b = c; 了。

关于c++ - boost::noncopyable 是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38959218/

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