删除类析构函数中的数组
Deleting array in destructor of the class
我有类名称类与成员:
class NameClass {
public:
int count;
apple* array;
}
和构造函数:
NameClass::NameClass()
{
count = 12;
array = new apple[count];
...
}
我应该在类析构函数中删除这个数组吗?又如何?
这会导致错误("未分配正在释放的指针"):
delete []apple;
or
delete apple;
delete []array;
应该是析构函数中使用的正确删除操作。
如果您收到上述错误
"这会产生错误("未分配正在释放的指针"):"
您要么错过了使用 nullptr
(或 NULL
)正确初始化array
,要么将未分配内存的地址传递给它(如堆栈分配引用)。
delete []apple;
不会编译,但你显然有一个运行时错误,所以你必须有delete []array;
。首先,这是正确的!
假设您的类几乎是微不足道的,则错误的原因可能是两个 NameClass
对象具有指向同一数组的array
指针。如果您的类没有用户定义的复制构造函数和/或赋值运算符,则可能会发生这种情况,在这种情况下,编译器将为您生成一个。如果你然后做这样的事情
NameClass n1;
NameClass n2 = n1;
或
NameClass n1;
NameClass n2;
n2 = n1;
在代码中,编译器只会将所有成员(包括array
指针)相互分配,使array
指向两个对象中的同一块内存(在后一种情况下,会导致最初在 n2
构造函数中分配的内存泄漏)。您需要做的是定义复制构造函数和赋值运算符,以便它们复制 array
指向的数组。因为您在析构函数、复制构造函数和复制赋值运算符(以及在构造函数中,但这很明显)中执行的操作必须相互兼容,所以这称为三法则。
相关文章:
- 如何在析构函数中删除C++中动态分配的数组?
- 为什么数组中对象的析构函数在被另一个对象替换时不被调用?
- C++ 在析构函数调用之前删除的动态成员数组
- 取消分配动态分配的字符数组的析构函数
- 在C++中删除指针数组时析构函数崩溃
- 为什么我不能使用已删除或私有析构函数分配类的数组?
- 如何对动态数组中的某些对象调用析构函数
- 为什么析构函数和复制构造函数使用对象数组显示此行为
- 这是删除析构函数中的数组的正确方法吗?
- 指向数组的指针的析构函数
- 具有受保护析构函数的类数组的动态分配
- 析构函数立即调用并删除我的数组
- 为什么析构函数不释放数组内存?
- 如何在具有指向对象的指针数组的类中创建复制构造函数和析构函数,其中对象本身具有指向整数的指针数组
- 析构函数删除在 main 中声明的动态数组
- 删除类数组而不调用析构函数
- 构造函数、析构函数和指针(以及向量、数组和删除等等)
- C++析构函数删除包含动态数组作为数据成员的对象时的用法
- C++动态数组析构函数错误
- c++字符串数组析构函数