如何结合 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);
使用->
代替.
来取消引用list1 指针。相当于这样:
(*list1).merge(*list2);
当然,如果*
没有保存在智能指针中,您可以删除任一列表前面的*
。
【讨论】:
以上是关于如何结合 boost::shared_ptr 和 stl 列表的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 g++ 在 Linux 上使用 boost/shared_ptr.hpp 编译 c++ 程序
返回 boost::shared_ptr 和从返回的原始指针构造 boost::shared_ptr 有啥区别?