Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么类QSharedPointer中没有重载运算符T*()_C++_Qt_Smart Pointers_Qsharedpointer - Fatal编程技术网

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

C++ 为什么类QSharedPointer中没有重载运算符T*(),c++,qt,smart-pointers,qsharedpointer,C++,Qt,Smart Pointers,Qsharedpointer,然而,classQSharedDataPointer拥有它 我总是必须定义一个Class::pointertypedef作为缩写,并使用Class::pointer(新类)创建一个指针 有人知道这其中的原因吗?我怀疑T*()运算符不存在的原因是,与其他许多Qt类(如QString、QByteArray等)一样,都提供了一个data()函数来访问Qt类的底层数据 这在Qt类之间维护了一个标准接口 此外,通过重载运算符,如果更改基础数据而在此处未意识到,则很容易出错。在我看来,使用data()函数可

然而,class
QSharedDataPointer
拥有它

我总是必须定义一个
Class::pointer
typedef
作为缩写,并使用
Class::pointer(新类)
创建一个指针


有人知道这其中的原因吗?

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

这在Qt类之间维护了一个标准接口

此外,通过重载运算符,如果更改基础数据而在此处未意识到,则很容易出错。在我看来,使用data()函数可以使您的操作更加明显

QSharedPointer的函数还警告不要删除返回的指针,或将其传递给任何可能删除它的对象,因此我将它视为一个函数,如果您确实需要它,它就在那里,但是如果您可以避免它,并且如果您确实使用它,请仔细考虑正在发生的事情,这会更好


至于QSharedDataPointer,根据这里调用的操作符,可以安全地调用。

先生,您能举个例子吗?您不想意外地将共享指针转换为原始指针,并被悬挂的指针卡住。如果要存储指向具有共享所有权的对象的指针,请存储共享指针(或弱指针)。如果需要将原始指针传递给某个接口,则需要确保对象的生存期足够长。因此,从共享指针到原始指针的隐式转换是自找麻烦的。“我总是必须…”-不,你没有
ptr.data()。