[英]Deleting an array of pointers vs deleting a vector of pointers
当我们打电话
delete[] array; // array is a pointer to an array
要么
delete[] vector; // vector is a pointer to a vector
假设它们是链接列表头指针的数组/向量:这2条语句是否为它们中的每一项调用析构函数? 还是我们应该遍历它们,删除每个项目,然后delete []数组或向量本身?
让我更具体一点,如果该数组持有带有其析构函数的头指针,则该数组将删除其下一个节点或它指向的节点。
您的第二个代码段不正确。 delete
和delete[]
是两个不同的运算符。 delete
用于删除new
创建的实例, delete[]
用于删除new[]
创建的元素数组。
在C ++中,数组和向量不关心它们存储的内容。 对于数组和向量,都需要先删除每个项目(如果它们是使用new
分配的),然后再删除数组和向量。
如果您这样创建数组
Sample* arr[100];
for (int i = 0; i < 100; ++i) {
arr[i] = new Sample();
}
您需要像这样删除它们
for (int i = 0; i < 100; ++i) {
delete arr[i];
}
如果创建这样的向量
vector<Sample*> arr;
for (int i = 0; i < 100; ++i) {
arr.push_back(new Sample());
}
您需要这样删除
for (int i = 0; i < 100; ++i) {
delete arr[i];
}
删除指针数组delete []数组是合适的,但是对于指针向量,我将使用如下结构:
std::vector<Data*> m_data;
while(!m_data.empty()) delete m_data.back(), m_data.pop_back();
在std::vector
上调用delete[]
是不正确的C ++。 当向量超出范围时,或者如果使用new
分配指向堆的指针delete
指针,则向量将被破坏。 在这两种情况下,但是,破坏了阵列/矢量不调用delete
它包含指针-你需要的,如果你需要释放该内存遍历和自己做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.