我可以将智能指针推到智能指针列表吗?

时间:2018-08-21 10:19:30

标签: c++ c++11 stl std shared-ptr

我有以下代码:

class MarchingEvent
{
...
};

typedef std::list< std::shared_ptr<MarchingEvent> > Segment;

我可以这样做:

void myFunction(std::shared_ptr<MarchingEvent> A)
{
    Segment segment;
    segment.push_back( A ); // <- Questionable line.
}

A 推到时,我的智能指针会正确增加吗?

1 个答案:

答案 0 :(得分:4)

  

按A进行细分时,我的智能指针会正确增加吗?

是的。这就是std::shared_ptr要做的。

但是请注意,如果在调用A之后不使用对象push_back,则可能需要将最后一行更改为

segment.push_back(std::move(A));

要移动构造segment中的元素而不是复制它-输入函数后就已经完成了复制,因为A是按值传递的。

相关问题