MST
星途 面试题库

面试题:C++中delete与delete []对自定义类数组的处理差异

定义一个包含构造函数和析构函数的自定义类`MyClass`,创建`MyClass* myArr = new MyClass[5];`,如果使用`delete myArr;`而不是`delete [] myArr;`,会对`MyClass`对象的析构过程产生怎样的影响,详细阐述其中的内存管理和对象生命周期问题。
29.9万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 内存管理问题
    • 使用delete myArr;时,它只会释放myArr指向的内存块的第一个元素的内存空间,而myArr所指向的数组中其余4个MyClass对象的内存空间不会被释放,这会导致内存泄漏。因为new MyClass[5];分配了一块连续的内存来存放5个MyClass对象,delete [] myArr;才是正确释放整个连续内存块的方式。
  2. 对象生命周期问题
    • 对于析构函数的调用,delete myArr;只会调用myArr指向的第一个MyClass对象的析构函数。其余4个MyClass对象不会调用析构函数。这意味着如果MyClass的析构函数中包含释放资源(如关闭文件、释放动态分配的内存等)的操作,那么其余4个对象相关的资源将不会被正确释放,进一步导致资源泄漏和程序的不稳定。
    • 正确使用delete [] myArr;会按顺序调用数组中5个MyClass对象的析构函数,然后释放整个连续的内存块,保证对象生命周期的正确结束和内存的正确回收。