这段代码:
#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; 一次是在主函数中初始向量声明,另外1000次是每次循环迭代时。
怎么回事?我如何才能像这样从一个函数返回一个向量(或任何其他对象),而不必每次都进行分配?
编辑:我知道我可以通过引用传递向量。 我的印象是可以(甚至更好)编写这样的函数,即使没有不必要的分配,也可以返回一个对象。
void mult(const float& k,const vec& x,vec& y)
。但显然,函数调用y=mult(k,x)
比mult(k,x,y)
更可取。 - Aurelius