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

Can I push a smart pointer to a list of smart pointers?

我有以下代码:

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推到时,我的智能指针会正确递增吗?

Will my smart pointer be correctly incremented when pushing A to segment?

是的。这就是 std::shared_ptr 应该做的。

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

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

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