析构函数的调用时间
对象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;
}