Здравствуйте, гость ( Вход | Регистрация )
wdefik | Дата 3.4.2010, 19:21 |
Ой, конечно же сначала свой а потом Интерфейса? | |
wdefik | Дата 3.4.2010, 18:10 |
wdefik, если коротко, то: 1. если класс наследник QObject`a и у этого класса есть хозяин/владелец/parent то за уничтожение объекта этого класса отвечает parent, в деструкторе этого класса необходимо лишь освободить память из под динамически созданных членов класса ненаследников QObject`a. 2. в остальных случаях должны действовать основные принципы С++. Для этого кода это означает,что сначала вызовется Деструктор QWidget'а, далее, так как деструктор класса Interface виртуальный, то вызовется деструктор класса Derived, который сначала вызовет деструктор класса Interface, а потом свой ? |
|
kwisp | Дата 3.4.2010, 15:09 |
wdefik, если коротко, то: 1. если класс наследник QObject`a и у этого класса есть хозяин/владелец/parent то за уничтожение объекта этого класса отвечает parent, в деструкторе этого класса необходимо лишь освободить память из под динамически созданных членов класса ненаследников QObject`a. 2. в остальных случаях должны действовать основные принципы С++. |
|
wdefik | Дата 3.4.2010, 14:59 |
сразу к проблеме: необходимо, чтобы классы, унаследованные от 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 будет уничтожать такой объект? Наверное нужно читать документацию, но, к сожалению нет времени, так что ненавязчиво прошу просветить меня по этому вопросу? Корректен ли такой код? не будет ли утечек памяти? Новичок. Не пинать. |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 28.3.2024, 11:34 |