小编Cra*_*lds的帖子

在基于范围的for循环中使用shared_ptr到std :: vector

我编写了一个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)

c++ shared-ptr c++11 ranged-loops

7
推荐指数
1
解决办法
576
查看次数

标签 统计

c++ ×1

c++11 ×1

ranged-loops ×1

shared-ptr ×1