基 class 析构函数 C++ 中的分段错误
Segmentation fault in base class destructor C++
我正在使用 Qt 开发一个应用程序,我在退出该应用程序时在我的虚拟基 class 的析构函数中看到一个分段错误。我认为这与声明成员变量静态有关,但我不确定。关于正在发生的事情的任何指示都会有所帮助。下面是我的示例代码。为了清楚起见,我删除了所有成员函数。
在头文件中:
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 class 析构函数中遇到分段错误。是不是因为m_base调用析构函数时静态成员变量不存在,而是虚的!
顺便说一句,我通过使 m_base 指向 Base class 的指针并在定义中实例化它来解决这个问题,但我仍然想知道上面的代码有什么问题。
谢谢!
您的示例代码不正确,因为您无法为 Base 创建实例,因为它是抽象的。
请说得更具体一些。
编辑:
我仍然不确定它是如何编译的,但是你必须添加 Base 析构函数实现:
Base::~Base()
{
}
我正在使用 Qt 开发一个应用程序,我在退出该应用程序时在我的虚拟基 class 的析构函数中看到一个分段错误。我认为这与声明成员变量静态有关,但我不确定。关于正在发生的事情的任何指示都会有所帮助。下面是我的示例代码。为了清楚起见,我删除了所有成员函数。
在头文件中:
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 class 析构函数中遇到分段错误。是不是因为m_base调用析构函数时静态成员变量不存在,而是虚的!
顺便说一句,我通过使 m_base 指向 Base class 的指针并在定义中实例化它来解决这个问题,但我仍然想知道上面的代码有什么问题。
谢谢!
您的示例代码不正确,因为您无法为 Base 创建实例,因为它是抽象的。
请说得更具体一些。
编辑: 我仍然不确定它是如何编译的,但是你必须添加 Base 析构函数实现:
Base::~Base()
{
}