QSharedPointer :: isNull()和operator!()之间的区别

时间:2013-11-12 09:43:15

标签: c++ qt shared-ptr qsharedpointer

在我们阅读的Qt文档中

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对应?

2 个答案:

答案 0 :(得分:5)

来自QSharedPointer类的Qt来源:

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

这证实了@JoachimPileborg在评论中所说的内容 - isNull()函数和operator!()是等效的。

答案 1 :(得分:3)

“null”QSharedPointer包装T * t,其中t等于0 / NULL / nullptr。这就是“对象为空”的含义

isNull()和operator!()是等价的,你可以使用任何一个。

默认情况下,共享指针为null,或者显式设置为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