【发布时间】:2015-04-05 12:44:47
【问题描述】:
我正在使用 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 类的指针并在定义中实例化它来解决这个问题,但我仍然想知道上面的代码有什么问题。
谢谢!
【问题讨论】:
-
你用的是什么编译器?它不应该允许你用纯虚函数实例化一个类。
-
这不应该编译,即使添加了缺少的
;和public说明符。Base是抽象的,因此您不能声明该类型的变量。请发布编译并演示您的错误的代码。 -
您必须定义析构函数(给它一个主体),即使它是纯虚拟的。请注意,您不能在课堂上进行。
标签: c++ qt static-members