Название: "Анонимное" создание объекта - хорошо или плохо? Отправлено: yashaka от Январь 22, 2010, 11:43 Нашел в книге Бланшета и Саммерфилда такой кусок кода:
HexSpinBox::HexSpinBox(QWidget *parent) : QSpinBox(parent) { setRange(0, 255); validator = new QRegExpValidator(QRegExp("[0-9A-Fa-f]{1,8}"), this); } Насколько я понимаю (интуитивно), выделенное жирным шрифтом это по сути new QRegExp("[0-9A-Fa-f]{1,8}") Удивился тому что так можно писать. Выходит можно? Просто в джаве есть сборщик мусора и потому там такие конструкции уместны, но ведь в Qt эта память даже после окончания блока освобождена не будет? Прав ли я? Или может быть это "нормально" писать такой код в Qt? Название: Re: "Анонимное" создание объекта - хорошо или плохо? Отправлено: DS_tm от Январь 22, 2010, 11:52 Вы не правы). Такая реализация вполне уместна как в коде с использыванием Qt, так и на чистых С++. Такой подход не выделяет динамически память под переменные, а добаляет переменные в стек. Как только программа выходит из области виденья стек очищаеться.
В данном примере память под переменную класса QRegExp будет очищена в конце работы конструктора класса QRegExpValidator. Название: Re: "Анонимное" создание объекта - хорошо или плохо? Отправлено: yashaka от Январь 22, 2010, 12:00 Ага, ясно. Буду знать:) Большое спасибо!
То есть это точно не равносильно "new QRegExp("[0-9A-Fa-f]{1,8}", ведь так память выделилась бы динамически. Тогда еще такой вопрос - а такая вот конструкция, с new, допустима? Название: Re: "Анонимное" создание объекта - хорошо или плохо? Отправлено: Kolobok от Январь 22, 2010, 12:19 Если при создании объекта ему передается parent, то да. Например, так:
Код: setCentralWidget( new QLabel( "label", this ) ); Название: Re: "Анонимное" создание объекта - хорошо или плохо? Отправлено: yashaka от Январь 22, 2010, 12:54 То есть, в таком случае это допустимо, поскольку Qt запомнит иерархию объектов и когда нужно освободит память, правильно?
Название: Re: "Анонимное" создание объекта - хорошо или плохо? Отправлено: DS_tm от Январь 22, 2010, 13:26 Ну не когда нужно, а в деструкторе).
Каждый объект при удалении удаляет всех сових детей, те удаляют всех своих детей, и так далее. Название: Re: "Анонимное" создание объекта - хорошо или плохо? Отправлено: lit-uriy от Январь 22, 2010, 16:23 >>выделенное жирным шрифтом это по сути new QRegExp("[0-9A-Fa-f]{1,8}")
категорически нет! объект создаётся не динамически, в Си++ в отличие от Джава объекты могут быть обычными переменным, и динамическими (создаваемыми с помощью new) При создании с помощью оператора new, этот оператор возвращает указатель на объект, а не сам объект. Название: Re: "Анонимное" создание объекта - хорошо или плохо? Отправлено: lit-uriy от Январь 22, 2010, 16:27 То есть, в таком случае это допустимо, поскольку Qt запомнит иерархию объектов и когда нужно освободит память, правильно? про какой случай? если речь идёт о наследниках QObject, в который передаётся указатель на родителя, там Qt занимается очисткой памяти. Если же код имеет вид:Код то выйдя за фигурные скобки (которые в Си/Си++ ограничивают область видимости), объект будет удалён самим компилятором Цитировать Или может быть это "нормально" писать такой код в Qt? нормально писать такой код в Си++, а не только в QtНазвание: Re: "Анонимное" создание объекта - хорошо или плохо? Отправлено: yashaka от Январь 22, 2010, 19:53 Ясно, разобрался:)
Большое спасибо за ответы! |