所以我有一个没有抽象方法的抽象基类.为了强制抽象,我已经将(非平凡的)析构函数声明为纯虚拟:
class AbstractClass
{
public:
AbstractClass()
{
std::wcout << L"AbstractClass::AbstractClass()" << std::endl;
}
virtual ~AbstractClass() = 0
{
std::wcout << L"AbstractClass::~AbstractClass()" << std::endl;
}
};
class ConcreteClass : public AbstractClass
{
public:
ConcreteClass()
{
std::wcout << L"ConcreteClass::ConcreteClass()" << std::endl;
}
virtual ~ConcreteClass()
{
std::wcout << L"ConcreteClass::~ConcreteClass()" << std::endl;
}
};
Run Code Online (Sandbox Code Playgroud)
这构建并按预期工作; 简单定义ConcreteClass实例的代码块的输出是
AbstractClass::AbstractClass()
ConcreteClass::ConcreteClass()
ConcreteClass::~ConcreteClass()
AbstractClass::~AbstractClass()
现在,当我从另一个用作接口类的类派生AbstractClass时,它本身具有(普通的)虚拟析构函数(纯或其他),它仍然有效:
class IAlpha
{
public:
virtual ~IAlpha() = 0 {}
};
class AbstractClass : public IAlpha
{
public:
AbstractClass()
{
std::wcout << L"AbstractClass::AbstractClass()" << …Run Code Online (Sandbox Code Playgroud)