请大家帮我分析下面程序吧,谢谢
#include<iostream>
#include<cstdio>
using namespace std;
class A
{
public:
A( );
A(const A &);
~A( );
int me_var;
};
A mymethod(int i)
{
A a;
a.me_var=i;
return (a);
}
A::A()
{
cout<<"she is a girl!"<<endl;
}
A::A(const A &b)
{
printf("error!\n");
}
A::~A( )
{
cout<<"hulihong"<<endl;
}
int main(void)
{
A a;
a=mymethod(5);
return 0;
}
程序结果如下:
she is a girl!
she is a girl!
error!
hulihong
hulihong
hulihong
[解决办法]
#include <iostream > #include <cstdio > using namespace std; class A { public: A( ); A(const A &); ~A( ); int me_var; int zz;}; A mymethod(int i) { A a; //调用构造函数 a.me_var=i; return (a); // 返回对象,调用拷贝构造函数初始化临时对象 //函数返回,局部变量释放,调用析构函数} A::A() : zz(-1){ cout <<"she is a girl!" <<endl; } A::A(const A &b) { printf("error!\n"); zz = 0;} A::~A( ) { cout <<"hulihong" << zz << endl; } int main(void) { A a; //调用构造函数 a = mymethod(5); // 临时变量生存期结束,调用析构函数 // 函数返回,调用析构函数析构a return 0; }
[解决办法]
第一个she is a girl是main函数里A a产生的
第二个she is a girl是mymethod()函数里A a产生的
error是mymethod()里返回a这个变量,并用这个变量初始化一个临时变量时产生的,
调用A::A(const A &b)
{
printf("error!\n");
}
第一个hulihong是mymethod()里a这个对象的析构函数
第二个hulihong是由mymethod返回的这个对象初始化的临时对象调用的析构函数
第三个hulihong是main函数的a这个对象的析构函数