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

标签 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;

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

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

谢谢!

最佳答案

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

请更具体一些。

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

Base::~Base()
{
}

关于c++ - 基类析构函数 C++ 中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28347741/

相关文章:

c++ - 提交 Qt 5.3 应用程序以供 Mac App Store 审核

c++ - 使用 QVectorIterator 时出错

c++ - 静态类成员在动态库中与主应用程序不同

c++ - 仅重新编译更改的文件(两步)

c++ - dynamic_cast 和多态性

c++ - C++ 中的矩阵运算(使用 Blas/Lapack 或其他替代方案)

c++ - 该片段在 Coliru 中编译时带有警告,但在 Ideone 中编译正常。哪一个是正确的?

qt - 在调试时在注册类中调用 qmlRegisterType() 会导致应用程序崩溃

c++ - 访问多个源文件中的 C++ 静态类成员变量

c# - 静态类 System.Configuration.ConfigurationManager 的别名;