【发布时间】:2011-10-29 01:29:03
【问题描述】:
对于我目前正在处理的代码,我们有时需要在一些较旧的系统上使用较旧的编译器进行编译(例如,我们在较旧的 IBM BlueGene/L 上运行 sims,其支持合同规定了一些相当旧的 C++ 编译器)。代码本身使用了 shared_ptr,最初是为了使用 std::tr1::shared_ptr 而编写的。在旧的 BlueGene 机器上编译时,我很快意识到它没有 tr1:: 实现,所以我切换到 boost::shared_ptr。原来还有一个 boost::tr1::shared_ptr。现在代码在我们的研究小组之外被更广泛地使用,可移植性变得更加重要。
在大型代码库中处理这些不断演变的标准库问题的(?)最佳实践是什么?我假设在新的 C++11 标准中,shared_ptr 将不再位于 tr1 命名空间中,这增加了另一个潜力:std::shared_ptr,但是我猜想对此的广泛支持将是一段路要走。如果可能的话,我想使用最新的标准,但需要保持可移植性。我应该坚持使用 boost 吗?
【问题讨论】:
-
已经有可以使用
std::shared_ptr的编译器,例如VC2010 和最新版本的g++。如果您需要支持多种不同的编译器,那么坚持使用 boost 可能是最简单的。 :) -
shared_ptr 将被添加到命名空间 std:: 中并不意味着它将从命名空间 std::tr1:: 中删除。我知道 gcc/libstdc++ 将保持两者向前发展。事实上,我相信 Visual Studio 也会如此。
-
我认为,如果您环顾四周,至少在过去两年中,大多数编译器对 std::shared_ptr 的支持非常广泛。我会先坚持使用 std::,然后寻找 std::tr1:: 然后按该顺序尝试 boost。
标签: c++ boost portability std tr1