class Date
{
int mo, da, yr;
public:
Date() { cout<<date constructor<<endl;="" }
~Date() { cout<<date destructor<<endl;="" }
}
int main()
{
Date* dt = new Date[5];
cout<<process the="" date<<endl;
delete dt; //这儿
return 0;
}
指针dt指向一个有五个元素的数组。按照数组的定义,编译器会让new运算符调用Date类的构造函数五次。但是delete被调用时,并没有明确告诉编译器指针指向的Date对象有几个,所以编译时,只会调用析构函数一次。下面是程序输出;
Date constructor
Date constructor
Date constructor
Date constructor
Date constructor
Process the date
Date destructor
为了解决这个问题,C++允许告诉delete运算符,正在删除的那个指针时指向数组的,程序修改如下:
#include iostream.h
class Date
{
int mo, da, yr;
public:
Date() { cout<<date constructor<<endl;="" }
~Date() { cout<<date destructor<<endl;="" }
}
int main()
{
Date* dt = new Date[5];
cout<<process the="" date<<endl;
delete [] dt; //这儿
return 0;
}
最终输出为:
Date constructor
Date constructor
Date constructor
Date constructor
Date constructor
Process the date
Date destructor
Date destructor
Date destructor
Date destructor
Date destructor