Russian Qt Forum
Сентябрь 24, 2024, 13:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Почему полями класса являются указатели, а не объекты  (Прочитано 4581 раз)
кып
Гость
« : Июль 28, 2009, 18:46 »

Почему во всех виденных мной примерах полями класса являются указатели на виджеты,
Код:
class Dialog : public QDialog
{
    Q_OBJECT
private:
    QLineEdit *lineEdits;
};
а не сами объекты виджетов?
Код:
class Dialog : public QDialog
{
    Q_OBJECT
private:
    QLineEdit *lineEdits;
};
Я, пока, особой разницы не вижу.
Записан
Rcus
Гость
« Ответ #1 : Июль 28, 2009, 19:12 »

Я тоже не вижу разницы в приведенных фрагментах Улыбающийся
Есть несколько причин:
  виджеты без parent'а это окна, так что все равно придется передавать указатель на родительский виджет;
  при использовании layout'ов происходит передача прав владения объектом;
  инстанцировать виджеты в списке инициализации неудобно: обычно есть необходимость в некоторых действиях до и после создания объекта;
  уменьшение зависимостей, и, как побочное следствие слабой связности ускорение компиляции;
  полиморфная природа наследников QObject (указатель на QLineEdit вполне может указывать и на KLineEdit Веселый)
Записан
кып
Гость
« Ответ #2 : Июль 29, 2009, 10:30 »

Спасибо.  Я примерно так все и предполагал, но думал что есть еще какая-то причина.
Не понял насчет ускорения компиляции, но это ладно, мне пока наверное рановато об этом заморачиваться.
А вот это
Цитировать
виджеты без parent'а это окна, так что все равно придется передавать указатель на родительский виджет;
при использовании layout'ов происходит передача прав владения объектом;
мне не совсем ясно. Если я положу объект в layout разве передачи прав не произойдет?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #3 : Июль 29, 2009, 10:49 »

Конечно произойдет. И для того, чтобы было очевидно, что что-то с объектом делается и передается указатель а не ссылка (а по значению его передавать вообще бессмысленно, тк получишь копию - а копия виджета есть бред)
Записан
кып
Гость
« Ответ #4 : Июль 29, 2009, 11:01 »

Ну и я про это же.
Наверное я не ясно выразился. Но я имел ввиду что шаг "придется передавать указатель на родительский виджет;" не нужен в данном случае.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.1 секунд. Запросов: 23.