我有一天和Qt一起工作,我想知道为什么他们所有的API都使用普通指针而不是像QSharedPointer
这样的智能指针。
使用它们会更加一致吗?
答案 0 :(得分:7)
QSharedPointer
自Qt 4.5起实施。在Qt中,QObject
将自己组织在对象树中。当您创建QObject
时,将另一个对象作为父对象,前者将添加到后者的子列表中,并在后者的析构函数中销毁。因此,您无需使用QSharedPointer
开销。
答案 1 :(得分:6)
为什么在Qt API中使用QSharedPointer
对象所有权通常是一个对象所独有的?没有必要分享。
一个更合适的问题是为什么Qt使用原始指针而不是智能指针(是那些Qt或C ++ 11),原因很简单 - 这些是新功能,即使Qt 5已经在C ++ 11之后发布(并在内部使用它),重写一切以使用智能指针除了繁琐也将导致用户代码的向后可比性的湮灭。
总体而言,Qt API在这方面似乎有些缺乏和不连贯。例如,Qt的智能指针在QtQuick中不受支持是一个很大的不便,QtQuick使用自己的私有智能指针实现,所以你应该拥有由QML引擎或C ++管理的所有权,但你不能真正分享这两者。