有关动态对象数组的问题:
请看代码:
#include <stdio.h>
#include <iostream.h>
#include <string.h>
#include <malloc.h>
class a
{
public :
a(int c1,int d1,char *p)
{
c=c1;
d=d1;
strcpy(string,p);
}
~a()
{
cout<<"destructor called for:"<<string<<endl;
}
int sum();
int e;
private:
int c,d;
char string[50]; //Record the object name.
};
int a::sum(void)
{
return (c+d+e);
}
void main(void)
{
char str[50];
a *objArr;
objArr=(a *)malloc(sizeof(a)*10);
int i=0,j=0;
for (i=0;i<10;i++,j++)
{
sprintf(str,"objArr[%d]",i);
*(objArr+i) = a(i,j,str);
(*(objArr+i)).e = 0;
}
for (i=0;i<10;i++)
{
printf("(*(objArr+%d)).sum()=%d\n",i,(*(objArr+i)).sum());
}
free(objArr);
}
输出结果如下:
destructor called for:objArr[0]
destructor called for:objArr[1]
destructor called for:objArr[2]
destructor called for:objArr[3]
destructor called for:objArr[4]
destructor called for:objArr[5]
destructor called for:objArr[6]
destructor called for:objArr[7]
destructor called for:objArr[8]
destructor called for:objArr[9]
(*(objArr+0)).sum()=0
(*(objArr+1)).sum()=2
(*(objArr+2)).sum()=4
(*(objArr+3)).sum()=6
(*(objArr+4)).sum()=8
(*(objArr+5)).sum()=10
(*(objArr+6)).sum()=12
(*(objArr+7)).sum()=14
(*(objArr+8)).sum()=16
(*(objArr+9)).sum()=18
Press any key to continue
问:
为什么动态分配的objArr对象在初始化时就被析构掉了?并且在对象释放掉後还依然能访问其数据成员,例如上面的sum函数?