Я использую Qt для разработки аппликации, для которой я вижу ошибку сегментации в своем деструкторе моего виртуального базового класса при выходе из приложения. Я думаю, что это связано с объявлением переменной-члена static, но я не уверен. Любые указатели на то, что происходит, помогут. Ниже приведен пример кода. Для ясности я удалил все функции-члены.Ошибка сегментации в деструкторе базового класса C++
В заголовочном файле:
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 не существует во время вызова деструктора, но она виртуальна!
BTW, я избавился от проблемы, сделав m_base указателем на базовый класс и создав его в определении, но мне все же хотелось бы знать, что не так с кодом выше.
Спасибо!
Какой компилятор вы используете? Это не должно было позволить вам создавать экземпляр класса с помощью виртуальных функций. – inetknght
Это не должно компилироваться даже после добавления отсутствующих спецификаторов ';' и 'public'. 'Base 'является абстрактным, поэтому вы не можете объявить переменную этого типа. Пожалуйста, отправьте код, который компилирует и демонстрирует вашу ошибку. –
Вы должны определить деструктор (придать ему тело), хотя это чистый виртуальный. Обратите внимание, что вы не можете сделать это в классе. –