3

我已经使用 Qt 有几天了,我想知道为什么他们所有的 API 都使用普通指针而不是他们自己的智能指针,例如QSharedPointer.

使用它们不是更一致吗?

4

2 回答 2

7

QSharedPointer从 Qt 4.5 开始实施。在 Qt 中,QObjects 以对象树的形式组织起来。当您创建一个QObject, 另一个对象作为父对象时,前者被添加到后者的子列表中,并在后者的析构函数中销毁。所以你不需要使用QSharedPointer它的开销。

于 2015-04-11T19:38:24.090 回答
6

为什么QSharedPointer在 Qt API 中对象所有权通常专属于一个对象时应该使用?没有必要分享。

一个更合适的问题是为什么 Qt 使用原始指针而不是智能指针(是那些 Qt 或 C++11),原因很简单——这些都是新特性,即使 Qt 5 在 C 之后发布++11(并在内部使用它),重写所有内容以使用智能指针除了繁琐之外还会导致用户代码的向后可比性消失。

总的来说,Qt API 在这方面似乎有些缺乏和不连贯。例如 - QtQuick 不支持 Qt 的智能指针是一个主要的不便,它使用自己的私有智能指针实现,因此您应该拥有由 QML 引擎或 C++ 管理的所有权,但您不能真正共享两者.

于 2015-04-12T00:11:39.973 回答