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