2

但是,类QSharedDataPointer有它。

我总是必须定义一个Class::pointer typedef缩写并创建一个指针Class::pointer(new Class)

有谁知道这其中的原因?

4

1 回答 1

1

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

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

此外,通过重载运算符,如果要更改基础数据而没有在此处实现,则很容易出错。在我看来,使用 data() 函数可以让你在做什么更加明显。

QSharedPointer的data()函数还警告不要删除返回的指针,或将其传递给任何可能删除它的东西,所以我认为它是一个函数,如果你真的需要它就在那里,但如果你能避免它更好,并且如果您确实使用它,请仔细考虑正在发生的事情。

至于 QSharedDataPointer,根据文档,在这里调用操作符会调用detach(),从而可以安全地调用。

于 2014-09-10T10:15:50.177 回答