в Qt docs мы читаем:
bool QSharedPointer::operator! () const
Returns true if this object is null.
This function is suitable for use in if-constructs, like:
if (!sharedptr) { ... }
а также
bool QSharedPointer::isNull () const
Returns true if this object is holding a reference to a null pointer.
В чем разница между этими двумя функциями? Понятно, что такое ссылка на нулевой указатель, но что здесь означает
«если объект нулевой»?
Что определяет, если QSharedPointer
нулевой? Как эти функции соответствуют QSharedPointer::data() != null
?
Из Qt источников QSharedPointer
учебный класс:
inline bool operator !() const { return isNull(); }
Это подтверждает то, что @JoachimPileborg сказал в своем комментарии — isNull()
функция и operator!()
эквивалентны.
«Нулевой» QSharedPointer оборачивает T * t, где t равно 0 / NULL / nullptr. Вот что означает «объект равен нулю»
isNull () и operator! () эквивалентны, вы можете использовать любой из них.
Общий указатель по умолчанию равен нулю или когда явно установлен в 0 / nullptr:
QSharedPointer<T> t; //null
QSharedPointer<T> t2(new T); //not null
QSharedPointer<T> t3(0); //null
QSharedPointer<T> t4(nullptr); //null
t2.clear(); //not null before, now null