有个类A(有无参默认构造函数),然后main函数中,定义了一个类A的对象,代码是这样:A a=A();
请问:这是通过A()临时建立一个类对象然后赋给a,然后再释放这个临时对象,还是等价"A a();"?我在构造函数和析构函数中加了输出的调试语句,但却只显示出一次类A的构造和析构
A a=A();
这样也是调用的构造函数,只是所谓的复制构造函数。它不会生成临时对象,再拷贝而是只有一次构造析构。
你改成
A a;
a=A();
这样试试
你加拷贝构造函数的A(const A& other)试试
这样可以生成一个对象,但是过程繁琐而且有隐性问题
在创建对象就初始化时,是调用深拷贝;相同对象之间赋值容易出现浅拷贝(这是不好的结果)。你的A()是创建无名对象,应该调用的是默认构造函数与默认析构函数,这是不会在屏幕输出的。
PS:说错了的地方请大家指出啊,谢谢。