我在一个类(class)中有一个 const std::vector<double> *vecPtr。我想正确释放内存,那么我的 destructor 应该是什么样的?

我试过 ~ClassA() { delete[] vecPtr; } ,但出现错误

*** Error in `./test': free(): invalid pointer: 0x00007fff8c643a98 ***
Aborted (core dumped)
delete[] 是否仅在 vector 填充指针时才起作用?

编辑:

我像这样使用 vecPtr:vecPtr = &vec;
如果我只使用 delete 我得到 *** Error in ./test': double free or corruption (fasttop): 0x00000000008fcb20 ***

最佳答案

这取决于您如何创建 vecPtr 。如果你使用 vecPtr = new std::vector<double> ,你应该使用 delete vecPtr;
如果 vecPtrarray new 创建,例如 vecPtr = new std::vector<double>[3]; ,则应使用 array delete , delete[] vecPtr;
编辑

如果你使用了 vecPtr = &vec; ,并且如果 vec 是一个自动变量,使用了自动内存,或者 vec 是一个静态变量或全局变量,使用了静态内存,你不应该删除它,它会被自动释放。只能删除动态内存。

关于c++ - 删除指向 vector 的指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26754579/

10-12 16:02