객체를 반환하는 함수에서 무슨 일이 일어나는가 ?


$ gcc --version

gcc (GCC) 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)

Copyright (C) 2004 Free Software Foundation, Inc.

This is free software; see the source for copying conditions.  There is NO

warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


일단 아래와 같이 시험용 클래스를 만든다.


객체를 선언한 후, 다음에 = 을 통해 값을 받으면,

출력 결과는 다음과 같다.

default constructor

default constructor

operator=

destructor

destructor


대략 2 라인에서 기본 생성자로 객체 생성

3라인의 getAAA() 내부에서 기본 생성자로 객체 생성 (임시 객체 생성)

3라인의 = 에서 대입연산자 호출

그리고 즉시 임시 객체 소멸

4라인에서 a 소멸



다음과 같이 이 두 줄의 코드를 한 줄로 변경하면,

default constructor

destructor


요렇게 된다.
이렇게 되는 이유는 대략 return value optimization. 아래 링크 참조

그런데 아무런 옵션이 없어도 저절로 이렇게 된다. 요즘 컴파일러는 똑똑하다.


레퍼런스 타입으로 함수를 호출하면 역시 동일하다.

default constructor

0 0

destructor



call by value 로 부르면,

default constructor

0 0

destructor



함수의 파라미터 타입이 const 여도, 그렇지 않아도 같은 결과가 나온다 @.@


[+]
c++11 에서는 move constructor 를 이용할 수 있다.


: