这是我的Car.class:
#include <iostream>
using namespace std;
class Car
{
public:
~Car() { cout << "Car is destructed." << endl; }
};
class Taxi :public Car
{
public:
~Taxi() {cout << "Taxi is destructed." << endl; }
};
void test(Car c) {}
int main()
{
Taxi taxi;
test(taxi);
return 0;
}
这是输出:
Car is destructed.
Car is destructed.
Taxi is destructed.
Car is destructed.
test(Car c)
函数使用值作为形式参数。转到该功能时会复制汽车。因此,我认为离开该功能时只会有一辆“汽车被毁”。但是实际上在离开函数时有两个“汽车被破坏”。(输出中显示的第一行和第二行)为什么会有两个“汽车被毁”?谢谢。
[创建Taxi
时,还创建了Car
子对象。当出租车被摧毁时,两个物体都被破坏了。
调用test()
时,将按值传递Car
。因此,第二辆汽车将被复制并在离开测试时被破坏。
我们有3个析构函数的解释。
我无法复制第四个。但这可能是临时的Car
,例如对于返回值(如果它是Car test(Car)
而不是void test(Car)
),或者对于从Taxi
到Car
的转换,如果您的编译器不执行复制省略。
[请注意,您在此处执行object slicing,在致电测试时丢失了汽车的出租车部分。为避免这种情况,您可以考虑通过引用传递。