gpt4 book ai didi

c++ - 保持 shared_ptr use_count() 为 1

转载 作者:行者123 更新时间:2023-12-03 16:00:55 24 4
gpt4 key购买 nike

我找不到与此类似的问题,如果我错过了,请指导我!
我正在试验智能指针,并来到这个场景,我想保留 use_count() 返回的值在 shared_ptr 对象中设置为 1(练习优化代码)。这是我正在使用的一个片段:

#include <iostream>
#include <memory>
#include <vector>

// testFunc: displays the use_count of each shared ptr in the list
void testFunc(const std::vector<std::shared_ptr<int>> &list) {
// reference each shared ptr in the list and display their use_count
for (auto &elem : list) {
std::cout << elem.use_count() << std::endl;
}
} // testFunc()

int main() {
// allocate shared ptr instance of an int
auto sharedTest = std::make_shared<int>(11);

// allocate another shared ptr instance of another int
auto anotherSharedTest = std::make_shared<int>(22);

// use std::move to prevent another copy of the shared ptrs from being created
testFunc({ std::move(sharedTest), std::move(anotherSharedTest) });

return 0;
} // main()
这个程序的输出是
2
2
因为两个共享ptr的use_count都是2。谁能告诉我为什么我不能把它们保持在1?我怀疑将 vector “传递”给 testFunc当整个 vector 被传递时,正在创建每个共享 ptr 的拷贝,但是这让我感到惊讶,因为我是通过引用传递 vector 。非常感谢任何输入!

最佳答案

问题是临时initializer_list<shared_ptr>保留元素的拷贝,它一直存在到完整表达式( ; )的结尾。
您无能为力,initializer_list总是通过拷贝存储其元素。
作为解决方法,您可以预先构建 vector :

std::vector<std::shared_ptr<int>> list{std::move(sharedTest), std::move(anotherSharedTest)};
testFunc(list);
应打印 1 1 .

关于c++ - 保持 shared_ptr use_count() 为 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67039285/

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