下面的代码会出现Do not invoke virtual member functions from constructor
的提示:
class IServer{
virtual void Stop() = 0;
~virtual IServer = 0;
};
class LinuxServer: public IServer {
void Stop override() { }
~LinuxServer() override
{
Stop(); // Do not invoke virtual member functions from constructor
}
};
解决办法:在类声明中的类名后面加上final
表示该类不会作为基类
class IServer{
virtual void Stop() = 0;
~virtual IServer = 0;
};
// ↓
class LinuxServer final: public IServer {
void Stop override() { }
~LinuxServer() override
{
Stop();
}
};