локальные объекты конструктора. ошибка |
Здравствуйте, гость ( Вход | Регистрация )
локальные объекты конструктора. ошибка |
__ilya__ |
9.7.2012, 9:55
Сообщение
#1
|
Студент Группа: Участник Сообщений: 57 Регистрация: 19.1.2012 Пользователь №: 3143 Спасибо сказали: 0 раз(а) Репутация: 0 |
читал макса шлее Qt4.5.
там в примерах все объекты, кнопки, слайдеры, надписи и Т.П. создаются в конструкторе локально. почему-то когда я создаю локальный обьект( динамически), в конструкторе при сборке выдает ошибку. может потому-что я использую Qt4.8. [code] Widget::Widget(QWidget *parent) : QWidget(parent) { //... QPushButton *button = new QPushButton("button"); //... } D:\QtCreator_test\SoundPlaer\widget.cpp:-1: In constructor 'Widget::Widget(QWidget*)': но все работает -если я создаю кнопки как члены класса(указатели). а уже в конструкторе динамически выделяю для них память. |
|
|
__ilya__ |
9.7.2012, 12:27
Сообщение
#2
|
Студент Группа: Участник Сообщений: 57 Регистрация: 19.1.2012 Пользователь №: 3143 Спасибо сказали: 0 раз(а) Репутация: 0 |
и есче вопрос-
если у меня члены класса(унаследаваного от QWidget), указатели, а в конструкторе я для них динамически выделяю память(new), нужен-ли деструктор? везде написано что Qt сама заботится об удалении объектов. |
|
|
sidsukana |
9.7.2012, 13:26
Сообщение
#3
|
Участник Группа: Участник Сообщений: 158 Регистрация: 23.12.2010 Из: Челябинск Пользователь №: 2296 Спасибо сказали: 10 раз(а) Репутация: 2 |
Qt Заботится об удалении QObject объектов, родителями которых были QObject объекты тоже.
В данном контексте obj1 удалит за собой и obj2 (на сколько я знаю) Еще есть метод deleteLater() он вроде как ставит в очередь на удаление. |
|
|
__ilya__ |
9.7.2012, 17:23
Сообщение
#4
|
Студент Группа: Участник Сообщений: 57 Регистрация: 19.1.2012 Пользователь №: 3143 Спасибо сказали: 0 раз(а) Репутация: 0 |
и все-же почему не получается создать, динамически, локально в конструкторе
|
|
|
Алексей1153 |
11.7.2012, 12:00
Сообщение
#5
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
Цитата class Widget:public QWidget { Q_OBJECT //не забыто ? } ну и Цитата QPushButton *button = new QPushButton("button", this);
Сообщение отредактировал Алексей1153 - 11.7.2012, 12:01 |
|
|
Гость_Гость___ilya___*_* |
11.7.2012, 23:20
Сообщение
#6
|
Гости |
спасибо помогло! Скажите а в чем смысл создавать объекты локально, в конструкторе? Почему.бы их не сделать членами класса? Я имею в виду кнопки, индикаторы и т.п.
|
|
|
Алексей1153 |
12.7.2012, 8:54
Сообщение
#7
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
ты не создаёшь тут локальных объектов.
Локальный тут только указатель button - он уничтожится по выходу из функции конструктора |
|
|
__ilya__ |
12.7.2012, 14:07
Сообщение
#8
|
Студент Группа: Участник Сообщений: 57 Регистрация: 19.1.2012 Пользователь №: 3143 Спасибо сказали: 0 раз(а) Репутация: 0 |
Алексей1153,
Тогда получается что все действия программы происходят внутри тела конструктора? |
|
|
Алексей1153 |
12.7.2012, 19:19
Сообщение
#9
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
нет, конечно
С чего ты это решил ? ) |
|
|
Текстовая версия | Сейчас: 2.1.2025, 15:39 |