这段代码:
#include <vector>
std::vector<float> getstdvec() {
std::vector<float> v(4);
v[0] = 1;
v[1] = 2;
v[2] = 3;
v[3] = 4;
return v;
}
int main() {
std::vector<float> v(4);
for (int i = 0; i != 1000; ++i)
{
v = getstdvec();
}
}
我在这里的错误理解是函数 getstdvec 不应该实际分配它返回的向量。当我在 valgrind/callgrind 中运行它时,我看到有 1001 次调用 malloc;main 中的初始向量声明为 1,每次循环迭代为 1000。
是什么赋予了?如何从这样的函数返回向量(或任何其他对象)而不必每次都分配它?
编辑:我知道我可以通过引用传递向量。我的印象是可以(甚至更可取)编写这样的函数来返回一个对象而不会产生不必要的分配。