将现有的 shared_ptr 附加到 shared_ptr 的矢量
Appending an existing shared_ptr to a vector of shared_ptr
我有一个 shared_ptr 的现有向量。我想搜索该向量,如果满足条件,则将相应的 shared_ptr 复制到新向量。
...
//vector< shared_ptr<Foo> > main_vec; // which already has some data
vector< shared_ptr<Foo> > output_vec{};
for ( auto iter = main_vec.begin() ; iter != main_vec.end() ; ++iter )
{
if ( (*iter)->bar() == true )
output_vec.push_back( *iter );
}
return output_vec;
...
我不相信以上是正确的??我猜这会复制 shared_ptr 但不会增加原件的 ref_count,还是我想多了?我对智能指针还很陌生。
TIA
I am guessing that this will copy the shared_ptr
正确。
but not increase the ref_count of the original
不,复制构造函数确实增加了引用计数。这就是共享指针被设计成可复制的方式。
I am not convinced the above is correct?
那么让我说服你:这是正确的。
I am not convinced the above is correct??
根据您的需求说明,正确。
如果你想了解更多...
特别声明:
output_vec.push_back( *iter );
具有以下效果:
*iter
returns 对智能指针的引用,即 std::shared_ptr<Foo>&
.
output_vec.push_back
将创建一个 new 智能指针,调用 copy-constructor.
std::shared_ptr
的拷贝构造函数:
Constructs a shared_ptr which shares ownership of the object managed by r.
因此共享对象的引用计数器将增加。
补充说明...
为了完整起见,我会添加一些个人建议。
1) For-each循环可以用更好的方式表达:
for (const auto& ptr : main_vec) {
if (ptr->bar()) output_vec(ptr);
}
2) 特别是,这个 for-each 可以用 copy_if
.
合成
我有一个 shared_ptr 的现有向量。我想搜索该向量,如果满足条件,则将相应的 shared_ptr 复制到新向量。
...
//vector< shared_ptr<Foo> > main_vec; // which already has some data
vector< shared_ptr<Foo> > output_vec{};
for ( auto iter = main_vec.begin() ; iter != main_vec.end() ; ++iter )
{
if ( (*iter)->bar() == true )
output_vec.push_back( *iter );
}
return output_vec;
...
我不相信以上是正确的??我猜这会复制 shared_ptr 但不会增加原件的 ref_count,还是我想多了?我对智能指针还很陌生。
TIA
I am guessing that this will copy the shared_ptr
正确。
but not increase the ref_count of the original
不,复制构造函数确实增加了引用计数。这就是共享指针被设计成可复制的方式。
I am not convinced the above is correct?
那么让我说服你:这是正确的。
I am not convinced the above is correct??
根据您的需求说明,正确。
如果你想了解更多...
特别声明:
output_vec.push_back( *iter );
具有以下效果:
*iter
returns 对智能指针的引用,即std::shared_ptr<Foo>&
.output_vec.push_back
将创建一个 new 智能指针,调用 copy-constructor.std::shared_ptr
的拷贝构造函数:Constructs a shared_ptr which shares ownership of the object managed by r.
因此共享对象的引用计数器将增加。
补充说明...
为了完整起见,我会添加一些个人建议。
1) For-each循环可以用更好的方式表达:
for (const auto& ptr : main_vec) {
if (ptr->bar()) output_vec(ptr);
}
2) 特别是,这个 for-each 可以用 copy_if
.