c++ 코드...

jee89의 이미지

#include <iostream>

class CBase
{
   int count;
   public:
   CBase(int i = 0 ):count(i) {}
   ~CBase() { cout << "Destructor" << endl;}
};

CBase func( CBase base )
{
     return CBase;
}

int main()
{
   CBase obj;
   func( obj );
}

이상을 레드햇리눅스에서 실행하면
Destructor 가 4번이 찍힙니다.
그런데, 유닉스에서 실행하면 3번이 찍힙니다.
왜 리눅스에서는 4번이 찍힐까요?
obj의 destructor가 한번
func내의 base 의 destructor가 한번
main의 func( obj ) 호출종료후 func내의 return 에 의해 생성된
temporary object 의 destructor가 한번
이렇게 3번이 맞는것같은데 리눅스에서 4번이 찍히는 이유가 뭘까요?
gcc 2.96
partout의 이미지

gcc 2.96에서는 정말 네 번 찍히네요.
잘은 모르겠지만... func내의 return 구문에서 생성한
temporary object 를 반환할 때 함수의 리턴형이 CBase인 관계로
한번 더 오브젝트가 생성된 게 아닌가 싶네요.

gcc 3.x에서 테스트해 봤는데....
이 경우에는 3번만 출력됩니다.
참고 하세요.

어찌나 졸린지..~~