相关疑难解决方法(0)

通过在基类中声明复制构造函数/运算符private,可以使派生类不可复制吗?

我在理论上认为这个问题的答案是肯定的.

但是,在实践中,我的编译器(VS2010)似乎并没有在以下情况下抱怨:我有一个抽象基类提供了一些通用接口(但没有数据成员)以及从中派生的各种子类和子类.

class Base 
{
public:
    Base() {}
    virtual ~Base() {}

    virtual void interfaceFunction1() = 0;
    virtual void interfaceFunction2() = 0;
private:
    Base(const Base&);            // all derived classes should be uncopyable
    Base& operator=(const Base&);

    // no data members
};
Run Code Online (Sandbox Code Playgroud)

我的编译器发现甚至在子子类或子子类中实现完整拷贝构造函数也没有问题.

如何确保从Base派生的每个类都是不可复制的?

编辑:如果我理解得很好,这正是Scott Meyers在Effective C++(第3版,2005)第6项中解释的他对类的想法Uncopyable(仅扩展到完整的接口类).是什么让他的想法发挥作用?(我知道他私下继承,但这不应该造成问题)

c++ abstract-class private base-class copy-constructor

7
推荐指数
1
解决办法
1896
查看次数