我编写了一个c ++函数,它汇总了一些数据,然后返回一个包含数据std::shared_ptr的新分配std::vector.类似于此的东西:
std::shared_ptr<std::vector<int>> shared_ptr_to_std_vector_of_ints()
{
auto v = std::make_shared<std::vector<int>>();
for (int i = 0; i < 3; i++) v->push_back(i);
return v;
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用基于范围的for循环迭代向量的内容,但它的作用就好像向量是空的.摆弄后,我发现通过将函数返回的值赋给局部变量,然后在循环中引用它,我可以使它按照我的预期运行:
// Executes loop zero times:
std::cout << "First loop:" << std::endl;
for (int i : *shared_ptr_to_std_vector_of_ints()) std::cout << i << std::endl;
// Prints three lines, as expected
std::cout << "Second loop:" << std::endl;
auto temp = shared_ptr_to_std_vector_of_ints();
for (int i : *temp) std::cout << i << std::endl;
Run Code Online (Sandbox Code Playgroud)
剪断打印这个:
First loop:
Second loop:
1 …Run Code Online (Sandbox Code Playgroud)