C++ C++;离开作用域后如何不释放std::vector数据?

C++ C++;离开作用域后如何不释放std::vector数据?,c++,vector,memory-management,heap-memory,C++,Vector,Memory Management,Heap Memory,我想做的事情如下: { std::vector<int> a; ... result.aData = a.data(); return result; } { std::载体a; ... result.aData=a.data(); 返回结果; } 但这显然是在范围结束时释放数据,这是我不想要的。我看到可以做到的是: { std::vector<int> *a = new vector<int>(); ...

我想做的事情如下:

{
    std::vector<int> a;
    ...
    result.aData = a.data();
    return result;
}
{
std::载体a;
...
result.aData=a.data();
返回结果;
}
但这显然是在范围结束时释放数据,这是我不想要的。我看到可以做到的是:

{
    std::vector<int> *a = new vector<int>();
    ...
    result.aData = a->data();
    a = nullptr;
    return result;
}
{
std::vector*a=新向量();
...
result.aData=a->data();
a=空PTR;
返回结果;
}
但我想避免动态分配,有人知道我该怎么做吗


谢谢!:)

从vector返回原始数据并销毁该vector是不可能的。 您应该将向量保存在某个地方一段时间,或者只使用原始内存分配

还要记住,只有在第一次调用任何修改向量内容的函数之前,使用从向量返回的原始指针才是安全的


问题中的第二个例子是内存泄漏,所以不要这样做。

有解决办法。然而,要知道std::vector动态地分配内存本身,所以完全避免它似乎是不可能的

一种可能的解决方法:

只需在函数中填充一个向量并返回它。实际情况是,它的一个副本将被返回

所以你的第一个例子是:

{
std::vector<int> a;
...
return a;
}
不会发生解除分配,但仍需复制。可以在函数中返回引用以避免创建副本。 但是,如果多个实例希望使用引用,那么返回引用可能会进一步把事情搞砸


然而。。。整个设置听起来像是试图以错误的方式解决问题,就像典型的XY问题一样。您最好向原始问题寻求帮助。

为什么
result
必须包含原始指针?谁应该拥有这些数据?简单<代码>返回a
结果。a=std::move(a);返回结果
为什么不在
结果中放入一个向量
?看起来像一个典型的@J.Doe,那么您可能应该使用
std::unique\u ptr
new T[]
而不是
std::vector
。它允许您释放已分配区块的所有权。使用vector无法实现这一点。
{
// Do something with m_vector
return m_vector;
}