QSharedPointer与std::tr1::shared_ptr与boost::tr1::shared_ptr的比较

5

这三个类分别来自Qt、STL和Boost,都是共享指针类。它们在功能上似乎相同,所以我感到困惑:

  1. 它们各自的优缺点是什么?
  2. 为什么要创建Boost和Qt版本 -- STL已经有了,为什么还要另外创建自己的版本?
  3. 我应该如何选择使用哪一个?

2
它并不是“已经在STL中了”。TR1基于Boost开发了其shared_ptr。http://en.wikipedia.org/wiki/C%2B%2B_Technical_Report_1#Smart_pointers。我不知道Qt的情况。 - Fred Larson
1
因为我不熟悉QT,这并不足以回答,但是... 1.除非你知道它有影响你的错误,否则始终优先选择STL版本。2.boost版本比其他版本存在多年,STL版本完全基于boost版本。3.见#1。 - ildjarn
2个回答

9

谢谢,这正是我在寻找的非常全面的比较。 - Septagram

8
  1. QSharedPointer需要Qt支持,而shared_ptr是标准且可移植的。
  2. std::shared_ptrboost::shared_ptr的标准替代品(也就是说,boost的先出现了,后来成为了标准)。
  3. 除非你有一个需要使用QSharedPointer的Qt类,否则不要使用它。如果你有tr1或C++0x实现,请使用std::shared_ptr,否则请使用boost::shared_ptr

我不认为这回答了他的任何问题,似乎只有我一个人这么想。 - zkunov
除了一长串历史讨论,这个简洁地陈述了当前的状况。但任何观点都可以进行反驳。 - edA-qa mort-ora-y
哦,这是正确的,我同意。仔细想想,我认为它只是部分回答了我的问题,我可能有点过度反应了,但那是因为我想看到对我来说特别重要的一些东西。 - zkunov
谢谢你的回答。特别是对于#2,它解决了Boost VS STL部分的问题。然而:1.实际上,我一直在使用Qt,这就是我首先提出问题的原因(很抱歉没有在上面提到)。此外,Qt也是可移植的。3.为什么?我有Qt类,它们不需要它,但为了保持一致性,我不愿将STL内容混合到Qt代码中(因为Qt提供了自己版本的几乎所有内容)。 - Septagram
1
不要害怕混合使用。标准是标准,将永远起作用。Qt 可在许多平台上使用,但远不及标准 C++ 多。然而,这可能现在对您来说并不是问题。使用标准代码还可以减少新人学习您的代码的难度。如果您仅使用 Qt 并避免使用标准,没有 Qt 经验的人将面临巨大的障碍。 - edA-qa mort-ora-y

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接