以下C++代码为何调用了3次析构函数而不是2次?析构函数调用次数不是和构造函数调用次数一样吗?

2024年11月28日 13:50
有4个网友回答
网友(1):

B temp;

上的代码创建了一个B,相应的有一个析构调用。

temp.play(5);

这里传递参数时,由于play接受一个B对象,所以会创建一个B。

B play(B b){return b;}

由于play函数返回一个B,所以相应的会创建一个b的拷贝。

网友(2):

1)B temp;一次
2) B(5):两次,调用带参构造函数
3)return b;三次,调用拷贝构造函数。由于没有显示的定义拷贝构造函数,将调用默认拷贝构造函数。

网友(3):

由于Play函数的参数不是指针也不是引用,所以会调用一次拷贝构造函数创建一个新的对象,之后当然会再调用一次析构函数了,你把类定义里添加拷贝构造函数就能看出来了

网友(4):

一个temp对象和两个临时对象(一个是成员函数play的参数,另一个是成员函数play的返回值),所以最终要调用三次析构函数。