代码之家  ›  专栏  ›  技术社区  ›  GMahan

基类析构函数C++中的分段错误[重复]

  •  0
  • GMahan  · 技术社区  · 9 年前

    我正在使用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;
    

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

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

    谢谢

    1 回复  |  直到 9 年前
        1
  •  3
  •   Kiko    9 年前

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

    请具体一点。

    编辑: 我仍然不确定这是如何编译的,但您必须添加Base析构函数实现:

    Base::~Base()
    {
    }