如果我有一个抽象基类,并且我想使所有派生类都不可复制和不可移动,那么在基类中声明这些特殊成员函数已删除是否足够?我想确保我的整个类层次结构都是不可复制和不可移动的,我想知道是否可以不必在每个派生类中声明这4个特殊成员函数已删除而达到此目的。我看过一个 Stack Overflow 的答案,似乎暗示派生类可以显式声明一个复制或移动构造函数,尽管它被从基类中删除,但当我尝试定义默认的复制赋值运算符时,以下示例会导致编译错误,因此我不确定。这是错误信息:
// base_class.h
class BaseClass {
public:
BaseClass(const BaseClass &) = delete;
BaseClass(BaseClass &&) = delete;
BaseClass &operator=(const BaseClass &) = delete;
BaseClass &operator=(BaseClass &&) = delete;
virtual ~BaseClass() = default;
virtual bool doSomething() = 0;
protected:
BaseClass(std::string name);
private:
std::string name_;
};
// derived_class.h
class DerivedClass : public BaseClass {
public:
DerivedClass();
DerivedClass(const DerivedClass &);
bool doSomething() override;
};
// derived_class.cc
DerivedClass::DerivedClass(const DerivedClass &) = default;