gpt4 book ai didi

c++ - 删除指针数组与删除指针 vector

转载 作者:搜寻专家 更新时间:2023-10-31 00:12:21 25 4
gpt4 key购买 nike

当我们打电话

delete[] array; // array is a pointer to an array

delete[] vector; // vector is a pointer to a vector

假设这些是链表头指针的数组/vector :这两个语句是否为其中的每个项目调用析构函数?或者我们应该循环遍历它们,删除每一项,然后删除 [] 数组或 vector 本身?

让我更具体一点,如果数组包含一个头指针并调用其析构函数,它会删除它的下一个节点或它指向的节点。

最佳答案

您的第二个代码片段不正确。 deletedelete[] 是两个不同的运算符。 delete 用于删除由 new 创建的实例,delete[] 用于删除由 new[]< 创建的元素数组.

在 C++ 中,数组和 vector 不关心它们存储的是什么。对于数组和 vector ,您需要在删除数组和 vector 之前删除每一项(如果它们是使用 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

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];
}

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com