crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Qt уничтожение дочерних объектов
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
wdefik Дата 3.4.2010, 19:21
  Ой, конечно же сначала свой а потом Интерфейса?
wdefik Дата 3.4.2010, 18:10
 
Цитата(kwisp @ 3.4.2010, 15:09) *
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 будет уничтожать такой объект? Наверное нужно читать документацию, но, к сожалению нет времени, так что ненавязчиво прошу просветить меня по этому вопросу?

Корректен ли такой код? не будет ли утечек памяти?

Новичок. Не пинать.


Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 11:34