我正在尝试通过引用将自定义对象的std :: vector传递给构造函数的方法,该构造函数将其复制/移动到另一个私有std :: vector成员,但是以某种方式在for循环中逐个元素地复制它会产生较小的程序尺寸而不是一次移动整个矢量。
通常我的构造函数中有以下代码:
constructor(std::vector<object*>& newVec)
{
for(int i=0; i<newVec.size(); ++i)
this->vec.push_back(newVec[i]);
}
[生成的Linux可执行文件的大小小于使用std :: mo这样的文件:
constructor(std::vector<object*>& newVec)
{
this->vec=std::move(newVec);
}
仅通过切换这两个代码片段,我从30kB的大小传递到35kB。
PS:向量中包含的对象与构造函数对象不同。
有人可以向我解释为什么前一个版本比后者更优化吗?
我正在尝试通过引用将自定义对象的std :: vector传递给将其复制/移动到另一个私有std :: vector成员的构造函数,>
在那种情况下,您不应使用左值引用参数。
按值传递,或r值引用。
此外,最好直接初始化成员,而不是默认初始化,然后再移动分配。
有人可以向我解释为什么前一个版本比后者更优化吗?
可能有很多潜在原因: