int main()
{
AAA obj1;
AAA obj2(obj1);
obj2.ShowData();
AAA obj3(30);
obj3.ShowData();
FuncA(obj3);
AAA obj4;
obj4 = FuncB();
obj4.ShowData();
return 0;
}
void FuncA(AAA a)
{
cout << "I'm in FuncA" << endl;
a.ShowData();
}
AAA FuncB()
{
cout << "I'm in FuncB" << endl;
AAA a(10);
return a;
}
기본적인 함수들은 만들어 놓고 ShowData는 그냥 value값 넣고 확인하려고 넣었어요.
이 아래는 컴파일 결과와 제가 생각하는 생성자와 소멸자 위치인데요
인자 없는 생성자 AAA obj1;
복사 생성자 AAA obj1;
val:0
인자 있는 생성자 AAA obj3(30);
val:30
복사 생성자 FuncA(obj3); **1번질문
I'm in FuncA
val:30
소멸자 **1번질문?
인자 없는 생성자 AAA obj4;
I'm in FuncB
인자 있는 생성자 obj4 = FuncB(); ** 2번질문
복사 생성자
소멸자
소멸자
val:10
소멸자
소멸자
소멸자
소멸자
1번질문. FuncA(obj3)에서 복사 생성자가 일어났다는건 앞에값이 함수일때 변수를 class값을주면 복사생성자가 생성되는건가요?
2번질문. FuncB가 AAA값의 함수이므로 우선 함수 안으로 들어가서 a(10)이라는 인자있는 생성자를 만들고 이값을 리턴하면서 복사 생성자가
쓰이고 그다음에 a(10)이 지역변수여서 사라져서 소멸자가 1번 실행되는거라 생각했는데 이부분에서 소멸자가 2번실행되네요.
한번은 어떤것 때문에 실행되는거죠?