2015-10-20 5 views
0

Когда я удаляю объект, указывающий на QPointer, я проверяю значение QPointer, и это не NULL, но когда я проверяю его функцию isNull, он возвращает true.Проверка QPointer NULL?

И еще странно, когда я делаю (!m_qpointer), он также возвращает true. Так как это возможно?

+0

«Когда я удаляю объект, на который указывает QPointer,« да, вы удаляете объект, а не указатель. – Zen

+0

---> Объект, теперь удалить Object: ----> MemoryAddressOfObject, поскольку вы можете видеть, что указатель все еще существует и указывает на тот же адрес, но объект больше недействителен. –

ответ

1

(!m_qpointer) возвращает истину при удалении объекта он указывает на, из-за этого оператора, определенного в qpointer.h:

inline operator T*() const 
    { return static_cast<T*>(const_cast<QObject*>(o)); } 

возвращает указатель Охранна. Если он был удален, он будет равен нулю.

isNull() возвращает истину, если указатель Охранна является нулевым:

inline bool isNull() const 
    { return !o; } 

Теперь я не уверен, что ты имеешь в виду проверить значение QPointer, и это не NULL. Почему это должно быть null? Объект QPointer все равно должен быть допустимым объектом даже после удаления указателя, который он защищает.

Смежные вопросы