ora*_*ice 0 c++ memory-management vector
说我有一个对象矢量
std::vector<int> data;
Run Code Online (Sandbox Code Playgroud)
此向量将非常大(大小为兆字节).我有一个需要返回此数据结构的函数.如果我返回这个数据结构"by-value"将会产生一个向量的副本吗?
std::vector<int> generate()
{
std::vector<int> data;
//Populate data
return data;
}
Run Code Online (Sandbox Code Playgroud)
将此操作与在堆上分配向量并将指针传递给向量相比,效率有多高?
std::vector<int>* generate()
{
std::vector<int>* data = new std::vector<int>();
//Populate data
return data;
}
Run Code Online (Sandbox Code Playgroud)
在您的特定情况下,大多数编译器将执行NRVO - 命名返回值优化.这意味着不会复制任何数据,但无法保证.有些情况下不会使用NRVO.在C++ 11及更高版本中,向量可能仍然使用移动语义,这将是非常有效的.
[编辑]
为了澄清,如果你使用C++ 11兼容编译器,那么你的代码是有效的,如果你坚持使用C++ 03然后更安全更好地返回函数参数(通过引用),因为在某些情况下你可能会以复制结束.
| 归档时间: |
|
| 查看次数: |
173 次 |
| 最近记录: |