gpt4 book ai didi

c++ - 将现有的 shared_ptr 附加到 shared_ptr 的 vector

转载 作者:太空宇宙 更新时间:2023-11-04 15:56:01 24 4
gpt4 key购买 nike

我有一个现有的 shared_ptr vector 。我想搜索该 vector ,如果满足条件,则将相应的 shared_ptr 复制到新 vector 。

...
//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 not convinced the above is correct??

根据您的要求规范,这是正确的。


如果你想了解更多...

特别声明:

output_vec.push_back( *iter );

具有以下作用:

  • *iter返回对智能指针的引用,即 std::shared_ptr<Foo>& .
  • output_vec.push_back将创建一个新的智能指针,调用复制构造函数
  • 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 合成.

关于c++ - 将现有的 shared_ptr 附加到 shared_ptr 的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57806712/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com