【问题标题】:Can boost::smart_ptr be used in std containers?boost::smart_ptr 可以在标准容器中使用吗?
【发布时间】:2013-07-10 02:37:42
【问题描述】:

在 std::map 等 std 容器中可以使用 boost::smart_ptr 如 scoped_ptr 和 shared_ptr 吗?

class SomeClass
{
    std::map<int,boost::scoped_ptr<SomeOtherClass> > a_map;
};

作为boost::smart_ptr can be used for polymorphism,在这种情况下也是如此吗?容器的销毁,会触发子类的正确销毁吗?

【问题讨论】:

  • 和以前一样:你试过了吗?
  • @BatchyX - 不。在我的情况下,重构相当多,所以我宁愿问。此外,如果答案不在 StackOverflow 上,它应该是:)
  • 去过那里,做到了。但我从中学到了,在大多数情况下,您可以编写 20-30 行测试程序,这些程序将在不到 5 分钟的时间内验证/使想法无效。 struct test { ~test() { std::cout &lt;&lt; "~test" &lt;&lt; std::endl; } }; int main() { vector&lt;shared_ptr&lt;type&gt; &gt; v; v.push_back( make_shared&lt;test&gt;() ); } (或者这一行的东西,很难在评论中写代码)。然后编译并验证是否调用了析构函数。使用scoped_ptr 再试一次,看看代码是否可以编译。加入其他几个操作(resize,...)并验证。
  • 你们是对的。我真的应该养成这个习惯 :) 即使我这样做了,我想我仍然会在 StackOverflow 上问同样的问题,因为我喜欢这里的互动。答案永远不是布尔值,我总是学习更广泛的背景。例如,在这种情况下,在我提交问题之前,我实际上发现 scoped_ptr 不能在容器中使用,但我仍然提交了它,Billy ONeal 将我推荐给我不知道的指针容器,现在我会去阅读关于他们...

标签: c++ boost polymorphism containers


【解决方案1】:

scoped_ptr 不能在标准容器中使用,因为它不能被复制(这是容器接口所要求的)。不过可以使用shared_ptr

如果您不能使用 C++11 并且您已经在使用 boost,请考虑使用 pointer containers,它的性能会比共享指针容器更好。

如果您使用的是 C++11,请考虑使用 unique_ptr 的容器,它的性能应该类似于 boost 的指针容器。

【讨论】:

  • @John Dibling:赢了?我们什么时候开始比赛了? :)
猜你喜欢
  • 2011-06-13
  • 1970-01-01
  • 2011-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多