如何结合 boost::shared_ptr 和 stl 列表

Posted

技术标签:

【中文标题】如何结合 boost::shared_ptr 和 stl 列表【英文标题】:How to combine boost::shared_ptr and stl list 【发布时间】:2014-08-06 14:48:23 【问题描述】:

我将 stl list 用作 boost::shared_ptr。例如:

#typedef boost::shared_ptr< std::list<SomeStruct> > list_ptr;
list_ptr list;
list_ptr otherlist;

现在我想将列表合并到另一个列表中。默认的 stl 行为是 list.merge(otherlist)。但是只要我使用shared_ptr,编译器就会抱怨它(没有数学函数)

现在我想通了,那

list.merge(*(otherlist.get())

编译。

问题:这是必须完成的方式还是只是我愚蠢的解决方法?

【问题讨论】:

你试过list.merge(*otherlist)吗?通常,您使用* 来取消引用指针,无论是智能的还是其他的。 是的,但不是 list->merge(*list2) list 是指list_ptr 是的。我编辑了上面的问题。谢谢。 【参考方案1】:

如果两个列表都保存在共享指针中,您可以这样做:

list1->merge(*list2);

使用-&gt; 代替. 来取消引用list1 指针。相当于这样:

(*list1).merge(*list2);

当然,如果* 没有保存在智能指针中,您可以删除任一列表前面的*

【讨论】:

以上是关于如何结合 boost::shared_ptr 和 stl 列表的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 g++ 在 Linux 上使用 boost/shared_ptr.hpp 编译 c++ 程序

返回 boost::shared_ptr 和从返回的原始指针构造 boost::shared_ptr 有啥区别?

boost::shared_ptr - 两个类之间的组合关系

boost库之内存管理shared_ptr

boost---shared_ptr笔记

Boost智能指针——shared_ptr