【发布时间】: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 << "~test" << std::endl; } }; int main() { vector<shared_ptr<type> > v; v.push_back( make_shared<test>() ); }(或者这一行的东西,很难在评论中写代码)。然后编译并验证是否调用了析构函数。使用scoped_ptr再试一次,看看代码是否可以编译。加入其他几个操作(resize,...)并验证。 -
你们是对的。我真的应该养成这个习惯 :) 即使我这样做了,我想我仍然会在 StackOverflow 上问同样的问题,因为我喜欢这里的互动。答案永远不是布尔值,我总是学习更广泛的背景。例如,在这种情况下,在我提交问题之前,我实际上发现 scoped_ptr 不能在容器中使用,但我仍然提交了它,Billy ONeal 将我推荐给我不知道的指针容器,现在我会去阅读关于他们...
标签: c++ boost polymorphism containers