C++ 有没有办法将数据从向量移动到动态数组?

C++ 有没有办法将数据从向量移动到动态数组?,c++,c++11,stl,C++,C++11,Stl,我使用std::vector在函数中为我进行分配。当我完成分配后,我希望不需要额外复制就可以从中获取普通数据。数据ptr将由另一个类处理,因此我可以舍弃向量,而不必关心它是否有效。基本上,我想转移vector数据的所有权。有没有办法做到这一点?通过设计std::vector无法转移所有权。但是,您可以通过使向量为静态并仅使用指向第一个元素的指针来延长向量的生存期: #include <iostream> #include <vector> int* getData()

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

通过设计
std::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";
    }
}
#包括
#包括
int*getData()
{
静态std::向量v;
v、 推回(0);
v、 推回(1);
v、 推回(2);
v、 推回(3);
返回v.data();//指向第一个元素的指针,相当于&v.front()或&v[0]
}
int main()
{
自动数据=getData();
对于(标准::大小\u t i(0);i<4;++i)
{

如果您询问是否有“分离”的方法,它可能包含大量的序列化图形数据一个向量的内部缓冲区指针,并将它以快乐的方式发送给你自己的邪恶行为,不。此外,它是由向量的分配器分配的,所以除非你用同样的方法销毁它,否则即使可能,你也会如履薄冰。@WhozCraig,你是对的,我在发布我的答案后意识到我的逻辑是错误的。总之唉,我已经删除了我的帖子。谢谢,那我就得重写这篇文章了。@Klaus,你说得对,我想我会把我的类包装在std::vector上,然后把这个向量移到里面,然后按照我的意思解释数据。你可以在调用
push_back
之前
清除这个向量。否则,向量每次
都会变大e> getData
被调用。@FredOverflow那么偷取指针的整个想法是愚蠢的。调用此方法(现在是这样)会使以前的指针无效。但是
清除
推回
做同样的事情。这是不安全的。正确的方法是在类中引用向量