首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于析构函数的疑惑~解决方法

2012-03-26 
关于析构函数的疑惑~程序如下:#include iostream.h#include string.hclass B{public:B(char *s,double

关于析构函数的疑惑~
程序如下:
#include <iostream.h>
#include <string.h>

class B 
{
public:
B(char *s,double n)
{
strcpy(name,s);
b=n;
cout<<"Constructor\n";
}
B() 
{
cout<<"Default Constructor\n";
}
~B()
{
cout<<"Destructor "<<name<<endl;
}
void getb(char *s,double& n)
{
strcpy(s,name);
n=b;
}
private:
char name[80];
double b;
};

void main()
{
B *p;
double n;
  char s[80];

p=new B[3];
p[0]=B("ma",4.8);

//p[1]=B("wang",3.6);
//p[2]=B("li",3.1);

//delete[] p;

}

//运行结果如下:
Default Constructor
Default Constructor
Default Constructor
Constructor
Destructor ma

//我的问题是:为什么在p[0]=B("ma",4.8);执行完成后,要调用一次析构函数呢?谢谢

[解决办法]
因为产生了临时对象,进行完赋值操作该临时对象就会析构掉
[解决办法]
B("ma",4.8);//是临时对象所以要析构
[解决办法]
p=new B[3];
时候调用默认无参构造器填充了数组,p[0]时手动指定数组中第一个元素,原来默认的填充对象被顶替掉,应该是被顶替掉的那家伙的析构吧.
[解决办法]
p[0]=B("ma",4.8);

这里B("ma",4.8)是个临时对象。

热点排行