#include <iostream.h>
class A
{
public:
A(int i)
{ a=i; }
A()
{
a=0;
cout<<"Default constructor called."<<a<<endl;
}
~A()
{ cout<<"Destructor called."<<a<<endl; }
void Print()
{ cout<<a<<endl; }
private:
int a;
};
void main()
{
A a[4],*p;
int n=1;
p=a;
for(int i=0;i<4;i++)
a[i]=A(++n);
for(i=0;i<4;i++)
(p+i)->Print();
}
答: Default constructor called. 0
Default constructor called. 0
Default constructor called. 0
Default constructor called. 0
Destructor called. 2
Destructor called. 3
Destructor called. 4
Destructor called. 5
2
3
4
5
Destructor called. 5
Destructor called. 4
Destructor called. 3
Destructor called. 2
为什么会出现这个结果呢?
上面的析构函数的调用是因为重新赋值之后要把原来的删除掉,但是里面的a值已经修改掉了。
然后下面的析构函数是到达最后的一个下被析构掉,因为判定出了程序结束,然后一次回头析构。