【发布时间】:2021-08-24 12:30:06
【问题描述】:
如果我有一个复杂的类 A,并且我定义了一个包含此类(或指向此类中的对象的指针)的数组,如果我使用 delete[],它是否会释放数组中每个元素的内容,然后数组本身,还是我必须手动释放所有元素(删除 arr[i])然后调用 delete[]?
** 我不允许使用 STL
【问题讨论】:
-
请出示您的代码。
delete arr[i]仅在数组元素是指针时有效,在这种情况下delete[]不会关心这些指针指向的对象 -
[专业提示] 不要使用
new。请改用std::vector<T>。假设您的T有一个正常工作的析构函数,它将为您清理所有内容。 -
尽量使用规则0(3/5/0)并使用vector,不要手动处理资源。
-
数组是“包含这个类”还是“指向这个类的对象的指针”不是一个微不足道的、无关紧要的细节。对于这个问题,这是一个非常重要的考虑因素。因此,对于整个问题,不可能有单一的答案。
-
如果您有
A arr[10];,则根本不使用delete[] arr;。你只有delete你new。你只有delete[]你new[]。而在现代 C++ 中,您应该考虑使用容器和智能指针。
标签: c++ arrays pointers destructor delete-operator