我使用std::vector
在函数中为我分配。当我完成后,我想从中获取纯数据,而无需额外复制。数据ptr将由另一个类处理,所以我可以抛弃向量,我不必关心它是否有效。基本上,我想转移矢量数据的所有权。有没有办法做到这一点?
答案 0 :(得分:0)
std::vector
的设计无法转让所有权。但是,您可以通过使向量static
并仅使用指向第一个元素的指针来延长向量的生命周期:
#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";
}
}
由于向量是static
,因此不会在范围的末尾调用析构函数(这是方法getData()
的结尾)。因此,使用.data()
在此范围之外返回的指针是安全的。