有没有办法将数据从矢量移动到动态数组?

时间:2014-03-22 11:16:06

标签: c++ c++11 stl

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

1 个答案:

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

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

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