是否有一种方法将数据从矢量移动到动态数组

Is there a way to move data from a vector to a dynamic array?

本文关键字:移动 数组 动态 数据 方法 一种 是否      更新时间:2023-10-16

我使用std::vector在函数中为我做分配。当我完成后,我想从它得到普通的数据,而不需要额外的复制。数据ptr将由另一个类处理,所以我可以忽略向量,我不必关心它是否有效。基本上,我想转移向量数据的所有权。有办法做到这一点吗?

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";
    }
}

演示:http://ideone.com/hsrOeH

由于向量是static,在作用域的末尾(即方法getData()的末尾)不调用析构函数。因此,在此范围之外使用.data()返回的指针是安全的。