Qt 中仅使用普通指针 API
Only plain pointers used in Qt API
我使用 Qt 已经有几天了,我想知道为什么他们所有的 API 都使用普通指针而不是像 QSharedPointer
这样的他们自己的智能指针。
使用它们不是更一致吗?
QSharedPointer
从 Qt 4.5 开始实现。在 Qt 中,QObject
s 在对象树中组织自己。当你创建一个 QObject
时,另一个对象作为父对象,前者被添加到后者的子列表中,并在后者的析构函数中被销毁。所以你不需要使用 QSharedPointer
及其开销。
为什么在 Qt API 中对象所有权通常是独占一个对象时使用 QSharedPointer
?不需要分享。
一个更合适的问题是为什么 Qt 使用原始指针而不是智能指针(Qt 或 C++11 的),原因很简单——这些是新功能,即使 Qt 5在C++11之后发布(并在内部使用它),重写一切以使用智能指针除了繁琐之外还会导致用户代码向后可比性的湮灭。
总的来说,Qt API 在这方面似乎有些欠缺和不连贯。例如 - QtQuick 不支持 Qt 的智能指针,这是一个很大的不便,它使用自己的私有智能指针实现,因此您应该由 QML 引擎或 C++ 管理所有权,但您不能真正在两者之间共享.
我使用 Qt 已经有几天了,我想知道为什么他们所有的 API 都使用普通指针而不是像 QSharedPointer
这样的他们自己的智能指针。
使用它们不是更一致吗?
QSharedPointer
从 Qt 4.5 开始实现。在 Qt 中,QObject
s 在对象树中组织自己。当你创建一个 QObject
时,另一个对象作为父对象,前者被添加到后者的子列表中,并在后者的析构函数中被销毁。所以你不需要使用 QSharedPointer
及其开销。
为什么在 Qt API 中对象所有权通常是独占一个对象时使用 QSharedPointer
?不需要分享。
一个更合适的问题是为什么 Qt 使用原始指针而不是智能指针(Qt 或 C++11 的),原因很简单——这些是新功能,即使 Qt 5在C++11之后发布(并在内部使用它),重写一切以使用智能指针除了繁琐之外还会导致用户代码向后可比性的湮灭。
总的来说,Qt API 在这方面似乎有些欠缺和不连贯。例如 - QtQuick 不支持 Qt 的智能指针,这是一个很大的不便,它使用自己的私有智能指针实现,因此您应该由 QML 引擎或 C++ 管理所有权,但您不能真正在两者之间共享.