请求解析C++代码输出逻辑:无法理解给定代码的输出结果
前提说明
编译器会为类X自动生成默认拷贝构造函数,但该函数不会触发cout << "cons"的输出;只有显式调用默认构造函数(X())才会打印cons。所有对象销毁时都会调用析构函数,打印decons。
按执行顺序拆解输出
第一行:
cons
对应代码:X o;
调用X的默认构造函数创建main函数的局部对象o,打印cons。第二行:
decons
对应代码:X* xo = fun(o);fun函数采用值传递参数,会拷贝main中的o生成函数内部的局部形参o(无输出)。当fun函数执行完毕返回时,这个局部形参对象被销毁,触发析构函数,打印decons。第三行:
decons
对应代码:delete xo;fun函数内部通过new X(o)在堆上创建了一个拷贝自形参o的对象(无输出)。执行delete xo时,堆上的这个对象被销毁,触发析构函数,打印decons。第四行:
cons
对应代码:o = fun1(o);
进入fun1函数后,执行X oo;,调用默认构造函数创建函数内部的局部对象oo,打印cons。第五行:
decons
对应fun1函数的return o;语句:
执行返回操作时,会先拷贝o生成一个临时返回对象(无输出),随后fun1函数内的局部对象oo被销毁,触发析构函数,打印decons。第六行:
deconsfun1返回的临时对象被用来赋值给main中的o,赋值完成后,这个临时对象立即被销毁,触发析构函数,打印decons。第七行:
deconsmain函数执行完毕,其局部对象o被销毁,触发析构函数,打印decons。
内容的提问来源于stack exchange,提问作者Vergil_The_Killer

