我使用 std::vector
在函数中为我进行分配。完成后,我想从中获取纯数据而无需额外复制。数据 ptr 将由另一个类处理,因此我可以放弃 vector ,而不必关心它是否有效。基本上,我想转让 vector 数据的所有权。有办法做到这一点吗?
最佳答案
std::vector
的设计无法转移所有权。但是,您可以通过将其设为 static
并仅使用指向第一个元素的指针来延长 vector 的生命周期:
#include <iostream>
#include <vector>
int* getData()
{
static std::vector<int> v;
v.push_back(0);
v.push_back(1);
v.push_back(2);
v.push_back(3);
return v.data(); // pointer to first element, equivalent to &v.front() or &v[0]
}
int main()
{
auto data = getData();
for ( std::size_t i(0); i < 4; ++i )
{
std::cout << data[i] << "\n";
}
}
因为 vector 是static
,所以析构函数不会在作用域末尾调用(即方法getData()
的末尾)。因此,在此范围之外使用 .data()
返回的指针是安全的。
关于c++ - 有没有办法将数据从 vector 移动到动态数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22576858/