Emy*_*scu 3 c++ oop constructor destructor
考虑以下代码:
class C1
{ public:
C1(){ cout<<"CONSTR WAS HERE"<<endl; }
C1(const C1&ob){ cout<<"COPY CONSTR WAS HERE"<<endl; }
~C1(){ cout<<"DESTR WAS HERE"<<endl; }
}
void f1(C1 x){ }
int main()
{
C1 c1;
f1(c1);
}
Run Code Online (Sandbox Code Playgroud)
如果我们按原样运行代码,我们得到:
CONSTR WAS HERE
COPY CONSTR WAS HERE
DESTR WAS HERE
DESTR WAS HERE
Run Code Online (Sandbox Code Playgroud)
从我的观点来看,这是完全可以理解的.但是,如果我们将函数"f1"修改为:
C1 f1(C1 x){}
代替
void f1(C1 x){}
我们得到:
CONSTR WAS HERE
COPY CONSTR WAS HERE
DESTR WAS HERE
DESTR WAS HERE
DESTR WAS HERE
Run Code Online (Sandbox Code Playgroud)
我不太清楚为什么
修改C1 f1(C1 x){}为实际返回的内容,您的输出将按预期进行(演示)
C1 f1(C1 x){ return {};}
Run Code Online (Sandbox Code Playgroud)
构造WAS HERE
COPY构造WAS HERE
构造WAS HERE
DESTR WAS HERE
DESTR WAS HERE
DESTR WAS HERE
否则您的代码会显示未定义的行为.