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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Указатели  (Прочитано 7045 раз)
developer
Гость
« : Июнь 19, 2009, 15:14 »

Как не используя QPointer, проверить указатель QWidget"а на истинность - то-есть что он указывает на правильный объектб а не куда-то в память.
Записан
ритт
Гость
« Ответ #1 : Июнь 19, 2009, 15:37 »

без эксепшенов?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #2 : Июнь 19, 2009, 16:49 »

В начале  и после каждого delete зануляешь указатель.

Код
C++ (Qt)
QPushButton *button = 0;
..............................
button = new QPushButton(this);
..............................
delete button;
button = 0;
..............................
if (button)
 ..................
else
 ..................
 
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #3 : Июнь 20, 2009, 02:11 »

qobject_cast
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #4 : Июнь 20, 2009, 02:31 »

qobject_cast

строго говоря, если компилятор не будет занулять указатели, то как qobject_cast узнает что это валидный указатель? g++ 4.3 например зануляет, и

Код
C++ (Qt)
  QWidget *g;
  qDebug("%d", g);
 

напечатает "0".

А если не занулит?
Записан
developer
Гость
« Ответ #5 : Июнь 23, 2009, 11:43 »

2 Константин
Цитировать
без эксепшенов?
Да без эксепшенов.
Пробовал просто занулить указатель, работает не всегда корректно, в некоторых случаях просто вылетает.
Записан
Rcus
Гость
« Ответ #6 : Июнь 23, 2009, 12:01 »

Да, любовь к велосипедам с квадратными колесами не имеет границ. Смысл отказываться от QPointer если он работает? Производительность? Не смешите меня или покажите пример где использование QPointer сильно сказывается на производительности.
Записан
developer
Гость
« Ответ #7 : Июнь 23, 2009, 15:48 »

Нда, ты все-таки прав, у меня оно все равно сходиться к использованию QPointer, даже если его не использовать, реализация напоминает QPointer.
Ок, закриваем ету тему.
Записан
ритт
Гость
« Ответ #8 : Июнь 23, 2009, 17:11 »

но, всё-равно, обнулять указатели после удаления - хорошая привычка Улыбающийся
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #9 : Июнь 23, 2009, 18:12 »

А вот у меня возникли вопросы в тему:

1. Как правильнее делать:
Код:
    QList<TMyClass *> list
или
Код:
QList<QPointer<TMyClass>> list
?

2. Все-таки обнулять указатели - присваивая им значение 0 или NULL ? Улыбающийся
Записан

ArchLinux x86_64 / Win10 64 bit
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #10 : Июнь 23, 2009, 18:43 »

Поищи на форуме топик 0 vs NULL. Улыбающийся
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #11 : Июнь 23, 2009, 19:18 »

2 panter_dsd,

спасибо.. прочитал..

а как все-таки тогда быть с п.1 ?
Записан

ArchLinux x86_64 / Win10 64 bit
Rcus
Гость
« Ответ #12 : Июнь 23, 2009, 19:24 »

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


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