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;
};
答案 0 :(得分:4)
不,派生类可以在其复制构造函数/赋值运算符中自由构造Base
。
class Derived : public Base {
public:
Derived(){}
Derived(const Derived&) : Base() {}
void interfaceFunction() override {}
};