为什么QSharedPointer类中没有重载的运算符T *()

时间:2014-09-10 09:35:04

标签: c++ qt smart-pointers qsharedpointer

然而,班级QSharedDataPointer拥有它。

我总是需要定义Class::pointer typedef以获得短缺,并使用Class::pointer(new Class)创建指针。

有人知道这个的原因吗?

1 个答案:

答案 0 :(得分:1)

我怀疑T *()运算符不存在的原因是因为T* data() function与许多其他Qt类(如QString,QByteArray等)一样,都提供了一个data()函数访问Qt类的基础数据。

这维护了跨Qt类的标准接口。

此外,通过重载运算符,如果要更改基础数据并且未在此处实现,则很容易出错。在我看来,使用data()函数可以让你更清楚你正在做什么。

QSharedPointer的data()函数也警告不要删除返回的指针,或者将它传递给任何可以删除它的东西,所以我把它看作是一个函数,如果你真的需要它,但是更好的你可以避免它,如果你使用它,仔细考虑发生了什么。

对于QSharedDataPointer,根据the documentation,调用运营商,此处呼叫detach(),以便安全呼叫。