我写了一个C++函数,用于汇集一些数据并返回指向新分配的包含数据的std::vector
的std::shared_ptr
。类似于这样的内容:
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;
}
我试图使用基于范围的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;
这段代码输出以下内容:
First loop:
Second loop:
1
2
3
为什么第一个版本不起作用?
我正在macOS Sierra 10.12.6上使用Xcode。 我相信它使用LLVM 9.0编译c ++代码。
std::vector
周围使用shared_ptr
吗?(因为std::vector
已经管理内存)?(特别是在提供的用法中)。 - Jarod42