Разница между QSharedPointer :: isNull () и оператором! ()

в 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 ?

3

Решение

Из Qt источников QSharedPointer учебный класс:

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

Это подтверждает то, что @JoachimPileborg сказал в своем комментарии — isNull() функция и operator!() эквивалентны.

5

Другие решения

«Нулевой» 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
3

По вопросам рекламы [email protected]