#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.
MS Visual Studio Community 2017을 사용하고 있습니다 (죄송합니다. Visual C ++ 버전을 보는 방법을 모르겠습니다). 디버그 모드를 사용했을 때. void test(Car c){ }
함수 본문을 예상대로 떠날 때 하나의 소멸자가 실행된다는 것을 알았습니다 . 그리고 끝날 때 여분의 소멸자가 나타났습니다 test(taxi);
.
이 test(Car c)
함수는 값을 공식 매개 변수로 사용합니다. 기능에 갈 때 자동차가 복사됩니다. 그래서 나는 기능을 떠날 때 단 하나의 "자동차가 파괴된다"고 생각했다. 그러나 실제로 함수를 떠날 때 두 개의 "Car is destructed"가 있습니다. 감사합니다.
===============
class Car
예를 들어 가상 함수를 추가 virtual void drive() {}
하면 예상 출력이 나타납니다.
Car is destructed.
Taxi is destructed.
Car is destructed.
Car
하면이 문제가 사라지고 예상 결과가 나타납니다.
Taxi
Car