小编som*_*unk的帖子

纯虚拟继承,多重继承和C4505

所以我有一个没有抽象方法的抽象基类.为了强制抽象,我已经将(非平凡的)析构函数声明为纯虚拟:

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)

c++ destructor multiple-inheritance pure-virtual

6
推荐指数
1
解决办法
1121
查看次数