基类析构函数C ++中的分段错误

时间:2015-02-05 15:26:04

标签: c++ qt static-members

我正在使用Qt开发一个应用程序,我在退出应用程序时在我的虚拟基类的析构函数中看到了分段错误。我认为这与声明成员变量静态有关,但我不确定。任何有关正在发生的事情的指示都会有所帮助。以下是我的示例代码。为清楚起见,我删除了所有成员函数。

在头文件中:

class Base : public QObject
{   
     public:
     Base() {}
     virtual ~Base() = 0; /// Fault occurs here in the debugger
};

class Child1: public Base
{
   public:
    Child1() {}
    ~Child1() {}
};

class Service 
{
   public:
     Service() {}
    ~Service() {}
private:
    static Child1 m_base;
};

在源文件中:

Child1 Service::m_base;

当我退出应用程序时,我在Base类析构函数中遇到了分段错误。是因为在调用析构函数时m_base静态成员变量不存在,但它是虚拟的!

顺便说一句,我通过使m_base成为指向Base类的指针并在定义中实例化它来解决问题,但我仍然想知道上面的代码有什么问题。

谢谢!

1 个答案:

答案 0 :(得分:3)

您的示例代码不正确,因为您无法为Base创建实例,因为它是抽象的。

请更具体。

编辑: 我还不确定如何编译,但你必须添加Base析构函数实现:

Base::~Base()
{
}