【问题标题】:QSharedPointer VS std::tr1::shared_ptr VS boost::tr1::shared_ptr [duplicate]QSharedPointer VS std::tr1::shared_ptr VS boost::tr1::shared_ptr [重复]
【发布时间】:2011-04-13 04:32:49
【问题描述】:

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

  1. 它们各自的优缺点是什么?
  2. 为什么 Boost 和 Qt 版本甚至存在 - 它已经在 STL 中,为什么要自己制作?
  3. 我应该如何选择使用哪一种?

【问题讨论】:

  • 它不是“已经在 STL 中”。 TR1 基于 Boost 的 shared_ptr。 en.wikipedia.org/wiki/C%2B%2B_Technical_Report_1#Smart_pointers。我不知道 Qt。
  • 因为我不熟悉 QT,所以这不值得回答,但是... 1. 总是更喜欢 STL 版本,除非您知道它有影响您的错误。 2. boost版本早于其他版本年,STL版本完全基于boost版本。 3. 见#1。

标签: c++ qt boost stl smart-pointers


【解决方案1】:

请查看here 以获得您问题的答案。

【讨论】:

  • 谢谢,这是我正在寻找的非常全面的比较。
【解决方案2】:
  1. QSharedPointer 需要 Qt,shared_ptr 是标准且可移植的
  2. std::shared_ptr 是 boost::shared_ptr 的标准替代品(也就是说,boost 最先出现并成为标准)
  3. 除非你有一个需要它的 Qt 类,否则不要使用 QSharedPointer。如果您有 tr1 或 C++0x 实现,请使用 std::shared_ptr,否则使用 boost::shared_ptr。

【讨论】:

  • 我不认为这能回答他的任何问题,但似乎只有我一个人
  • 没有对它们中的每一个进行长时间的历史讨论,这简明扼要地陈述了当前的事态。但是,请随意不同意任何观点。
  • 哦,这是正确的,我同意,再想一想,我认为它回答了部分问题,我可能反应过度了,但那是因为我想看到一些对我来说具体而重要的事情。
  • 感谢您的回答。特别是对于#2,它解决了 Boost VS STL 部分。但是:1.实际上,我到处都在使用Qt,这就是为什么我首先提出这个问题(抱歉上面没有提到)。此外,Qt 也是可移植的。 3. 为什么?我确实有 Qt 类,它们不需要它,但为了保持一致性,我不愿意将 STL 的东西混入 Qt 代码(因为 Qt 提供了几乎所有东西的自己的版本)
  • 不要害怕混合。标准是标准的,并且将永远在那里工作。 Qt 在很多平台上都可用,但不如标准 C++ 那么多。但是,这对您现在可能不是问题。使用标准代码还可以减少新人对您的代码的学习曲线。如果你只使用 Qt 而避开标准,那么没有 Qt 经验的人将面临一个巨大的障碍需要克服。
猜你喜欢
  • 2011-10-29
  • 2012-06-11
  • 2011-04-19
  • 2010-10-03
  • 1970-01-01
  • 1970-01-01
  • 2012-03-10
  • 1970-01-01
  • 2011-08-01
相关资源
最近更新 更多