通过删除基类中的复制构造函数/运算符,可以使派生类不可复制吗?

时间:2016-06-02 15:13:48

标签: c++ c++11 copy-constructor

Pre C ++ 11,我问是否可以使用私有/未实现的技巧(参见here)。显然,这是不可能的。

我想知道新的= delete语法是否改变了事务状态,因为强制派生类是不可复制的仍然是一个有用的功能。

更新后的代码段可能会显示以下内容:

class Base 
{
public:
    Base() {}
    virtual ~Base() {}
    Base(const Base&) = delete;
    Base& operator=(const Base&) = delete;

    virtual void interfaceFunction() = 0;
    // etc.

    // no data members
};

class Data { /* ... */ };
class Derived : public Base  // is this class uncopyable ?
{
    Derived() : managedData(new Data()) { }
    ~Derived() ( delete managedData; }

    virtual void interfaceFunction() override { /* ... */ }

    Data* managedData; 
};

1 个答案:

答案 0 :(得分:4)

不,派生类可以在其复制构造函数/赋值运算符中自由构造Base

class Derived : public Base {
public:
    Derived(){}
    Derived(const Derived&) : Base() {}
    void interfaceFunction() override {}
};