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

标签 c++ qt smart-pointers qsharedpointer

但是,QSharedDataPointer 类拥有它。

为了简短起见,我总是必须定义一个 Class::pointer typedef 并使用 Class::pointer(new Class) 创建一个指针.

有人知道这是怎么回事吗?

最佳答案

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

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

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

data() QSharedPointer 的函数也警告不要删除返回的指针,或将它传递给任何可以删除它的东西,所以我将它视为一个函数,如果你真的需要它,它就在那里,但如果你能避免它并且如果你确实使用它会更好仔细想想发生了什么。

至于QSharedDataPointer,根据the documentation,在这里调用接线员调用 detach() ,可以安全调用。

关于c++ - 为什么QSharedPointer类中没有重载运算符T*(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25761981/

相关文章:

c++ - 验证数字是否为斐波那契数列

c++ - ifstream 麻烦

c++ - 停止 Qt 脚本的评估

python - setItemWidget 导致崩溃

qt - 如何让 Qt 小部件忽略在父小部件上设置的样式表?

c++ - 如何使用 OpenACC 对微分方程进行积分?

C++ 异常,thow const char* 类型并捕获

c++ - std::shared_ptr 的自定义删除器

c++ - 模板模板函数的重载

c++ - 基类 unique_ptr 到派生类 shared_ptr