Название: как узнать создан ли объект ? Отправлено: izoomer от Март 04, 2007, 20:50 в заголовочном файле есть
Код:
а в реализации требуется по первому событию создавать объект _label , а по второму удалять ... так вот, можно ли обойтись без создания флага дополнительного , то есть можно ли определить, создан ли уже обект , то есть создали ли уже объект строкой типа Код:
что бы не делать delete для пустого объекта, что соответсвенно вызовет ошибку. Название: как узнать создан ли объект ? Отправлено: gelo от Март 04, 2007, 21:49 Сравнить _label с NULL?
Название: как узнать создан ли объект ? Отправлено: izoomer от Март 04, 2007, 22:06 Цитата: "gelo" Сравнить _label с NULL? точно ! спасибо Название: Re: как узнать создан ли объект ? Отправлено: pastor от Март 05, 2007, 02:16 Цитата: "izoomer" что бы не делать delete для пустого объекта, что соответсвенно вызовет ошибку. Это не вызовит ошибку. Проверка на NULL есть в самом операторе delete. Вот что печатают в MSDN: Цитировать You can use delete on a pointer with the value 0. Тож самое пишет и Страуструп. Так что, код Код:
эквивалентен Код:
за исключение того, что первый вариант избыточен. Название: Re: как узнать создан ли объект ? Отправлено: izoomer от Март 05, 2007, 13:04 Цитата: "pastor" Цитата: "izoomer" что бы не делать delete для пустого объекта, что соответсвенно вызовет ошибку. Это не вызовит ошибку. Проверка на NULL есть в самом операторе delete. Вот что печатают в MSDN: Цитировать You can use delete on a pointer with the value 0. Тож самое пишет и Страуструп. Так что, код Код:
эквивалентен Код:
за исключение того, что первый вариант избыточен. спасибо за разъеснения, буду читать внимательней теперь. Название: Re: как узнать создан ли объект ? Отправлено: Alex03 от Март 05, 2007, 13:51 Цитата: "izoomer" а в реализации требуется по первому событию создавать объект _label , а по второму удалять ... так вот Немного не в тему..., но может тот случай :) Иногда проще/выгодней создать и удалить один раз, также как и всё остальное. А для показа/непоказа вызывать show()/hide(). Название: как узнать создан ли объект ? Отправлено: Alex Custov от Март 05, 2007, 14:43 Guarded pointers are useful whenever you need to store a pointer to a QObject that is owned by someone else and therefore might be destroyed while you still hold a reference to it. You can safely test the pointer for validity.
Example: Код:
Название: как узнать создан ли объект ? Отправлено: Mikhail от Март 05, 2007, 15:01 А еще лучше
QLabel * lab = dynamic_cast<QLabel *>(_label); if ( lab ) { } else { } dynamic_cast возвратит указатель либо 0; Название: как узнать создан ли объект ? Отправлено: QCasper от Март 05, 2007, 15:05 Цитата: "Mikhail" А еще лучше QLabel * lab = dynamic_cast<QLabel *>(_label); if ( lab ) { } else { } dynamic_cast возвратит указатель либо 0; тогда уж qobject_cast... Название: как узнать создан ли объект ? Отправлено: Mikhail от Март 05, 2007, 16:36 Полностью согласен. Так еще лучше
Название: как узнать создан ли объект ? Отправлено: Alex Custov от Март 05, 2007, 17:49 dynamic_cast не будет работать, если _label изначально не проинициализирован хотя бы нулевым указателем, так что QGuardedPtr всё равно лучше :)
Название: как узнать создан ли объект ? Отправлено: Вудруф от Март 07, 2007, 08:14 Цитировать Сравнить _label с NULL? С нулём, тогда уж. Ибо 0 - это нулевой указатель (который может не совпадать побитово с нулём целого типа), а NULL - макрос, который то самое и обозначает. |