【问题标题】:Is there a native/reliable alternative for boost::shared_ptr in VC++?在 VC++ 中是否有 boost::shared_ptr 的本机/可靠替代方案?
【发布时间】:2010-08-26 12:42:31
【问题描述】:

我的公司不允许使用boost(出于许多愚蠢的原因,但这是题外话)。

当我习惯使用 shared_ptrweak_ptrscoped_ptr 进行个人发展时,我不得不使用原始指针感到非常沮丧。

我们只使用 Microsoft 编译器 (Visual Studio 2010),我想知道这些模板是否有替代方案可以减轻我的痛苦。

我曾经听说过std::tr1,但我不确定这是什么。我相信这是微软对下一个标准的某种实现,但我们可以依赖它吗?它提供什么?有什么保证吗?应该包含哪些标题?

【问题讨论】:

  • 嗯,虽然 boost 和 stl 是非常非常好的轮子,(我告诉过)人们应该努力避免重新发明——而且有很多话要说来支持使用标准化智能指针——它们真的不难制作。
  • @Chris Becke:如果没有其他解决方案,我最终将不得不做我的。但是如果有什么方法可以使用比我聪明的人制造的东西,我想知道如何;)
  • 请不要用“(出于许多愚蠢的原因,但那是题外话)来取笑我们!:-) 一方面,我很想知道愚蠢的原因!

标签: c++ visual-studio boost tr1


【解决方案1】:

使用 VC10 只需使用它已经提供的 shared_ptrweak_ptrunique_ptr 实现。您所要做的就是添加<memory>

【讨论】:

  • 谢谢,它似乎有效(尽管我必须指定std::tr1,而文档指出shared_ptrstd 中)。下一个C++ 将由微软实施时会发生什么。他们会突然放弃对tr1 的支持吗?我应该为命名空间使用别名吗?
  • @ereOn:这很奇怪,我在 VC10 中使用 std::shared_ptr 没有任何问题 - 应该不需要变通办法。
  • 我正在使用命令行和“本地优化”的 makefile 进行编译...如果有人以某种方式禁用了常见 makefile 中的某些功能,我不会感到惊讶。或者它可能仍在使用 VC8 编译器。有没有办法将 std::tr1 带入 std ? (这甚至是个好主意吗?)
  • 不要乱用std::tr1。它将继续作为对未来读者的警告,您仍在使用shared_ptr 的预标准版本。
  • @ereOn:我会首先通过例如调查 VC 版本。 _MSC_VER。据我所知,在没有模板别名的情况下,没有完全令人满意的解决方案。
【解决方案2】:

TR1 是 Technical Report 1 的缩写,是向标准委员会提出的 C++ 标准新特性的建议。查看标题(或它包含的其他标题)。如果 VS2010 实现了 TR1,那么你很有可能拥有 tr1 智能指针。这些应该与 Boost 智能指针相同。

【讨论】:

  • 感谢您的亮点。确实,它似乎提供了shared_ptr
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-03
  • 2016-09-23
  • 1970-01-01
  • 1970-01-01
  • 2019-12-15
相关资源
最近更新 更多