Qt уничтожение дочерних объектов, при наследовании от интерфейсных классов |
Здравствуйте, гость ( Вход | Регистрация )
Qt уничтожение дочерних объектов, при наследовании от интерфейсных классов |
wdefik |
3.4.2010, 14:59
Сообщение
#1
|
Студент Группа: Новичок Сообщений: 14 Регистрация: 4.3.2010 Пользователь №: 1505 Спасибо сказали: 0 раз(а) Репутация: 0 |
сразу к проблеме:
необходимо, чтобы классы, унаследованные от QT-классов обладали некоторым общим дополнительным интерфейсом, необходимым в контексте некоторой задачи. Как правильно организовать наследование и уничтожение объектов таких классов средствами Qt ? QT при уничтожении родительского класса вызывает деструктор дочернего или может, как всегда, что-нибудь более изощренное? т.е. например: CODE class Interface : public QWidget { public: Interface(QWidget *parent) : QWidget(parent){} virtual void func1()=0; virtual void func2()=0; virtual ~Interface(){} }; class Derived : public Interface { Derived(QWidget *parent) : Interface(parent){} virtual void func1(){} virtual void func2(){} ~Derived(){} }; int main(int argc, char* argv[]) { QApplication app(argc, argv); QMainWindow *ptr = new QMainWindow(0); Interface *Iptr = new Derived(ptr); return app.exec(); } А теперь сам вопрос: Как QT будет уничтожать такой объект? Наверное нужно читать документацию, но, к сожалению нет времени, так что ненавязчиво прошу просветить меня по этому вопросу? Корректен ли такой код? не будет ли утечек памяти? Новичок. Не пинать. |
|
|
kwisp |
3.4.2010, 15:09
Сообщение
#2
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
wdefik,
если коротко, то: 1. если класс наследник QObject`a и у этого класса есть хозяин/владелец/parent то за уничтожение объекта этого класса отвечает parent, в деструкторе этого класса необходимо лишь освободить память из под динамически созданных членов класса ненаследников QObject`a. 2. в остальных случаях должны действовать основные принципы С++. |
|
|
wdefik |
3.4.2010, 18:10
Сообщение
#3
|
Студент Группа: Новичок Сообщений: 14 Регистрация: 4.3.2010 Пользователь №: 1505 Спасибо сказали: 0 раз(а) Репутация: 0 |
wdefik, если коротко, то: 1. если класс наследник QObject`a и у этого класса есть хозяин/владелец/parent то за уничтожение объекта этого класса отвечает parent, в деструкторе этого класса необходимо лишь освободить память из под динамически созданных членов класса ненаследников QObject`a. 2. в остальных случаях должны действовать основные принципы С++. Для этого кода это означает,что сначала вызовется Деструктор QWidget'а, далее, так как деструктор класса Interface виртуальный, то вызовется деструктор класса Derived, который сначала вызовет деструктор класса Interface, а потом свой ? |
|
|
wdefik |
3.4.2010, 19:21
Сообщение
#4
|
Студент Группа: Новичок Сообщений: 14 Регистрация: 4.3.2010 Пользователь №: 1505 Спасибо сказали: 0 раз(а) Репутация: 0 |
Ой, конечно же сначала свой а потом Интерфейса?
|
|
|
Текстовая версия | Сейчас: 28.3.2024, 13:24 |