해결된 질문
작성
·
112
0
21분37초의 코드와 결과를 보면 testFunc(10)에서 반환한 인스턴스가 블록을 벗어남과 동시에 소멸을 하게 되어서 ~TestData(10)이 먼저 나와야 할 것 같은데 결과는 ~TestData(100)이 먼저 프린트 되고 있습니다. 강의 중간 부분까지는 강사님이 "객체는 블록을 벗어나면서 소멸되고, 복사 생성자가 호출이 되어서..." 이런 방법으로 설명해주시다가 21분 37초의 코드는 결과만 보여주고 넘어가셔서. 정확히 어떤것 때문에 저런 결과가 나왔는지 궁금합니다!
답변 1
0
testFunc(10).setData(100);
상기 코드에서 두 번째 줄 코드가 수행되는 시점에 생성된 임시 객체는 해당 구문이 끝나는 즉시 소멸합니다. 그리고 testFunc() 함수의 매개변수가 const TestData& 이므로 int 데이터 10을 매개변수로 임시 객체가 main() 쪽에서 생성됩니다. 결국 두 임시 객체 모두 해당 구문이 끝나면 소멸하는 것으로 봐야 하겠습니다.
다만 여기서 질문하신 순서 문제는 역순으로 이해하시면 되겠습니다. 결과적으로 어떤 것이 먼저 소멸하든 상관이 없겠으나 메모리를 Stack 구조로 관리하는 것이 일반적이므로 역순이 된다 생각하셔도 좋겠습니다. 참고하시기 바랍니다. 😄