【C/C++ Qt shared_ptr | make_shared | QSharedPointer 】绕圈圈
-
Qt::make_shared
和std::make_shared
:- 这两个函数都用于创建共享智能指针,但它们属于不同的命名空间,分别用于 Qt 和标准 C++ 库。
Qt::make_shared
实际上是一个宏,它在 Qt5.15 版本中被弃用,并在 Qt6 中移除了。在 Qt5.15 之前的版本中,Qt::make_shared
用于创建QSharedPointer
。std::make_shared
是 C++ 标准库的一部分,用于创建std::shared_ptr
。
-
std::shared_ptr
和QSharedPointer
:- 这两个类模板都实现了共享所有权的智能指针,它们通过引用计数来管理对象的生命周期。
std::shared_ptr
是 C++11 引入的标准库智能指针,适用于所有 C++ 程序。QSharedPointer
是 Qt 框架的一部分,它与std::shared_ptr
有类似的功能,但可能在某些方面与 Qt 的其他特性(如父子关系和信号槽机制)更好地集成。
-
命名空间和使用场景:
- 命名空间确实不同,
std::shared_ptr
位于std
命名空间中,而QSharedPointer
位于 Qt 的命名空间中。 - 使用场景不同,
std::shared_ptr
通常用于标准 C++ 代码中,而QSharedPointer
用于 Qt 应用程序中,特别是当需要与 Qt 的对象树和事件系统交互时。
- 命名空间确实不同,
-
本质:
- 虽然它们的本质都是实现共享所有权的智能指针,但它们的实现细节可能有所不同,特别是在与各自框架的其他部分集成方面。
总结来说,Qt::make_shared
在较新版本的 Qt 中已经不再推荐使用,而 std::make_shared
用于创建 std::shared_ptr
。std::shared_ptr
和 QSharedPointer
在功能上相似,但它们分别属于不同的库,并且在某些特定场景下可能更适合使用其中一个。在 Qt 应用程序中,通常推荐使用 QSharedPointer
,因为它可能更好地与 Qt 的其他特性集成。