Bob*_*ugo 4 c++ stdvector move-semantics
如何std::vector安全地将其内容移动到数组中,而无需复制或遍历所有元素?
void someFunc(float* arr, std::size_t& size)
{
std::vector<float> vec(5, 1.5f);
// do something with the data
size = vec.size();
arr = vec.data(); // this doesn't work, as at the end of the function the data in std::vector will be deallocated
}
main()
{
float* arr;
std::size_t size{0};
someFunc(arr, size);
// do something with the data
delete [] arr;
}
Run Code Online (Sandbox Code Playgroud)
如何为数组分配数据,std::vector并确保不会调用取消分配std::vector?也许还有其他想法可以解决这个问题?
你不能
向量拥有其缓冲区。你不能偷它。
您将必须单独复制/移动元素,可以选择使用帮助您进行迭代的辅助算法(std::copy/ std::move)。
(还请注意,由于您的元素类型为just float,因此此处的移动是副本。)
(还要注意,此std::move算法std::move与右值强制转换不同。)
考虑您是否真的需要这样做。vec.data()只要使向量保持活动状态,就可以在需要时使用向量数据作为数组。当然,这比牺牲RAII更好吗?
| 归档时间: |
|
| 查看次数: |
102 次 |
| 最近记录: |