我有一个这样的类类型:

struct permanent_runnable {
    static std::vector<permanent_runnable*> instants;
protected:
    permanent_runnable() {
        instants.push_back(this);
    }
public:
    virtual ~permanent_runnable() {}
    virtual void start() = 0;
    virtual void stop() = 0;
};
我希望所有从该persistent_runnable类型继承的类型都没有副本构造函数和可赋值运算符。如果有人不遵守该规则,则会输出编译错误!
我该怎么存档?

最佳答案

您不能阻止用户执行不良操作。如果他们足够努力,他们将找到一种方法。话虽如此,使基础不可分配且不可复制构造是一个很好的指示,即派生类也不应提供以下内容:

struct base {
    base() = default;
    base& operator=(const base&) = delete;
    base(const base&) = delete;
};

struct derived : base {};

int main()
{
    derived a;
    //derived b(a);  // error
    derived c;
    //c = a; // error
}
我想您实际上希望permanent_runnable是不可分配的且不可复制构造的,因为在类本身可以被复制构造和分配的同时要求派生类具有这种要求是不合理的。

关于c++ - 如何在父类型中限制子类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/65019769/

10-16 02:27