Название: Почему полями класса являются указатели, а не объекты Отправлено: кып от Июль 28, 2009, 18:46 Почему во всех виденных мной примерах полями класса являются указатели на виджеты,
Код: class Dialog : public QDialog Код: class Dialog : public QDialog Название: Re: Почему полями класса являются указатели, а не объекты Отправлено: Rcus от Июль 28, 2009, 19:12 Я тоже не вижу разницы в приведенных фрагментах :)
Есть несколько причин: виджеты без parent'а это окна, так что все равно придется передавать указатель на родительский виджет; при использовании layout'ов происходит передача прав владения объектом; инстанцировать виджеты в списке инициализации неудобно: обычно есть необходимость в некоторых действиях до и после создания объекта; уменьшение зависимостей, и, как побочное следствие слабой связности ускорение компиляции; полиморфная природа наследников QObject (указатель на QLineEdit вполне может указывать и на KLineEdit :D) Название: Re: Почему полями класса являются указатели, а не объекты Отправлено: кып от Июль 29, 2009, 10:30 Спасибо. Я примерно так все и предполагал, но думал что есть еще какая-то причина.
Не понял насчет ускорения компиляции, но это ладно, мне пока наверное рановато об этом заморачиваться. А вот это Цитировать виджеты без parent'а это окна, так что все равно придется передавать указатель на родительский виджет; мне не совсем ясно. Если я положу объект в layout разве передачи прав не произойдет?при использовании layout'ов происходит передача прав владения объектом; Название: Re: Почему полями класса являются указатели, а не объекты Отправлено: Авварон от Июль 29, 2009, 10:49 Конечно произойдет. И для того, чтобы было очевидно, что что-то с объектом делается и передается указатель а не ссылка (а по значению его передавать вообще бессмысленно, тк получишь копию - а копия виджета есть бред)
Название: Re: Почему полями класса являются указатели, а не объекты Отправлено: кып от Июль 29, 2009, 11:01 Ну и я про это же.
Наверное я не ясно выразился. Но я имел ввиду что шаг "придется передавать указатель на родительский виджет;" не нужен в данном случае. |