面试题答案
一键面试delete ptr2;
- 构造函数调用情况:已经调用了
Resource
类默认构造函数6次(1次为ptr1
指向的对象,5次为ptr2
指向的数组中的对象)。 - 析构函数调用情况:只调用1次
Resource
类的析构函数,因为delete
没有和new[]
匹配使用,它只会销毁ptr2
指向的数组的第一个对象。 - 可能导致的内存问题:内存泄漏。数组中剩余4个对象的内存没有被释放,因为它们的析构函数没有被调用,这部分内存无法再被程序使用,造成了内存浪费。
- 构造函数调用情况:已经调用了
delete [] ptr2;
- 构造函数调用情况:同上述,已经调用了
Resource
类默认构造函数6次(1次为ptr1
指向的对象,5次为ptr2
指向的数组中的对象)。 - 析构函数调用情况:调用5次
Resource
类的析构函数,因为delete []
会遍历数组,依次调用每个对象的析构函数,将ptr2
指向的数组中的5个对象都正确销毁。 - 可能导致的内存问题:无内存问题,内存正确释放,所有对象的析构函数都被调用,分配的内存被正确回收。
- 构造函数调用情况:同上述,已经调用了
delete ptr1;
- 构造函数调用情况:已经调用了
Resource
类默认构造函数1次(为ptr1
指向的对象)。 - 析构函数调用情况:调用1次
Resource
类的析构函数,delete
和new
匹配使用,正确销毁ptr1
指向的对象。 - 可能导致的内存问题:无内存问题,内存正确释放,对象的析构函数被调用,分配的内存被正确回收。
- 构造函数调用情况:已经调用了