이 코드는 다음과 같습니다왜 이런 상황에서는 하나의 생성자 만 호출되지만 두 개의 소멸자가 호출됩니다. 처음에
#include "stdafx.h"
#include<iostream>
using namespace std;
class Test{
public:
explicit Test(int);
~Test();
//Test(Test&);
int varInt;
};
Test::Test(int temp){
varInt = temp;
cout << "call Test::constructor\n";
}
Test::~Test(){
cout << "call Test::destructor\n";
}
/*Test::Test(Test&temp){
varInt = temp.varInt;
cout << "call Test::copy constructor\n";
}*/
void func(Test temp){
cout << "call func\n";
}
int _tmain(int argc, _TCHAR* argv[])
{
func(Test(1));
return 0;
}
출력 :
call Test::constructor
call func
call Test::destructor
call Test::destructor
이 (FUNC의 인수로) 생성 된 하나의 개체 만있을 원인, 나에게 혼란 만 함수가 끝난 후에 두 소멸자가 호출되었습니다. 기본 복사 생성자가 호출 되었기 때문에 이것이 궁금한가요? 그래서 복사 생성자에 대한 정의를 작성했습니다. 복사 생성자의 정의가 작성되어 좀 더 이상해졌습니다.
이가 출력 :
call Test::constructor
call func
call Test::destructor
상황이 지금 단지되었다 당신은 클래스로, 위의 복사 생성자, 즉 정의를 볼 수 내가 주석 처리 된 코드를 추가 한 후 는, 출력은 다음과 같이되었다 . 누군가이 현상을 나에게 설명 할 수 있습니까? 대단히 감사합니다.
복사/이동 생성자를 잊어 버렸습니다. – Rakete1111
복사 생성자를 만들지 않으면 컴파일러에서 자체 생성자를 만듭니다. –