我可以将智能指针推送到智能指针列表吗?
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
是按值传递的。
我有以下代码:
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
是按值传递的。