在向量超出范围后,我可以强制 std::vector 不释放其内存吗?
Can I force std::vector to not deallocate its memory after the vector goes out of scope?
例如,如果我有
int* foo() { std::vector<int> v(10,1); // trivial vector return &v[0]; } int main() { int* bar = foo(); std::cout << bar[5] << std::endl; }无法保证此处仍可访问这些值.
There is no guarantee that the values will still be accessible here.
我目前只是这样做
int* foo() { std::vector<int> v(10,1); int* w = new int[10]; for (int i=0; i<10; i++) { w[i] = v[i]; } return w; }但是重新填充一个全新的数组有点浪费.有没有办法强制 std::vector 不删除它的数组?
but it is a little wasteful to repopulate a whole new array. Is there a way to force std::vector to not delete its array?
注意:我没有返回向量本身,因为我使用 SWIG 将 c++ 与 python 连接起来,并且 ARG_OUTVIEW_ARRAY 需要一个原始指针,实际上,这是一个有意的内存泄漏.然而,我仍然希望能够在构建数据本身的同时利用矢量特征.
Note: I am not returning the vector itself because I am interfacing c++ with python using SWIG, and ARG_OUTVIEW_ARRAY requires a raw pointer and, in fact, an intentional memory leak. I would still however like to be able to make use of vector features while constructing the data itself.
推荐答案vector 旨在防止泄漏.
但如果你想用脚射击自己,这是可能的.以下是防止向量释放其内部数组的方法:
But if you want to shoot yourself in the foot, it's possible. Here's how you prevent the vector from deallocating its internal array:
int *foo() { std::vector<int> v(10,1); int *ret = v.data(); new (&v) std::vector<int>; // Replace `v` with an empty vector. Old storage is leaked. return ret; }正如其他答案所说,你永远不应该这样做.
As the other answers say, you should never do it.
更多推荐
我可以强制 std::vector 留下内存泄漏吗?
发布评论