Pre C++11,我问这是否可以使用私有(private)/未实现的技巧(参见 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;
};
最佳答案
不,派生类可以随意在其复制构造函数/赋值运算符中构造Base
。
class Derived : public Base {
public:
Derived(){}
Derived(const Derived&) : Base() {}
void interfaceFunction() override {}
};
关于c++ - 是否可以通过删除基类中的复制构造函数/运算符来使派生类不可复制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37595775/