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

析构函数的调用时间解决办法

2013-04-20 
析构函数的调用时间对象motto2为什么在函数中间就调用了析构函数,见注释——————#includeiostreamusing na

析构函数的调用时间
对象motto2为什么在函数中间就调用了析构函数,见注释——————


#include<iostream>
using namespace std;
class Cmessage
{
private:
char* pmessage;
public:
Cmessage(const char* text = "default message.")
{
pmessage = new char[strlen(text)+1];
strcpy(pmessage,text);
cout<<"instructor called."<<endl;
}
~Cmessage()
{
delete [] pmessage;
cout<<"destructor called."<<endl;
}
void showit()
{
cout<<pmessage<<endl;
}
Cmessage operator=(const Cmessage& amess)
{
if(this == &amess)//例如 motto == motto
return *this;
else
{
delete [] pmessage;
pmessage = new char[strlen(amess.pmessage)+1];
strcpy(this->pmessage,amess.pmessage);
return *this;
}
}
void reset()
{
char* temp = pmessage;
while(*temp)
*(temp++) = '*';
}
};
int main()
{
Cmessage motto1("fuzhigouzao.");
Cmessage motto2;
cout<<"motto2 - ";
motto2.showit();
cout<<endl;

motto2 = motto1;//为何此句结束后motto2就调用析构函数?为什么不是在return之后呢?

cout<<"motto2 - ";
motto2.showit();
cout<<endl;

motto1.reset();

cout<<"motto1 - ";
motto1.showit();
cout<<endl;

cout<<"motto2 - ";
motto2.showit();
cout<<endl;

return 0;
}



运行结果为:
Running: 
instructor called.
instructor called.
motto2 - default message.

destructor called.
motto2 - 乱码 //这里不是应当为“fuzhigouzao.”吗?

motto1 - ********************************

motto2 -乱码 //同上

destructor called.
destructor called. C++ 类 析构函数
[解决办法]
Cmessage & operator=(const Cmessage& amess)
返回值改成引用;
在析构里输出pmessage,看看就知道了,先析构的motto2,然后是motto1

热点排行