C++ 복사 생성자에 대해서 질문드립니다.

thslrtoo의 이미지

#include <iostream>
 
using namespace std;
 
class MyClass
{
public:
	int a;
 
public:
	void Test()
	{
		cout << a << endl;
	}
 
public:
	MyClass(void)
	{
		a = 10;
		cout << "생성자" << endl;
	}
 
	~MyClass(void)
	{
		cout << "소멸자" << endl;
	}
 
	MyClass(const MyClass& temp)
	{
		a = temp.a;
 
		cout << "복사생성자" << endl;
	}
 
	MyClass & operator = (const MyClass& temp)
	{
		a = temp.a;
 
		cout << "대입연산자" << endl;
 
		return *this;
	}
};
 
MyClass Create()
{
	MyClass temp;
 
	return temp;
}
 
int main(void)
{
	MyClass a(Create());
 
	a.a = 15;
	a.Test();
 
	return 0;
}

위와 같은 코드가 있다고 가정할때, 출력 결과로는

==== output =====
생성자
복사생성자
소멸자
복사생성자
소멸자
15
소멸자

이렇게 예상을 했는데요.
실행해보니 아래와 같이 나왔습니다.

==== output ====
생성자
15
소멸자

혹시나 하여 VS2008 에서도 컴파일 해봤는데 이번에는 아래와 같이 나오네요.

==== output ====
생성자
복사생성자
소멸자
15
소멸자

결과가 왜 이렇게 출력되는건가요??
제가 예상한 결과로는 VS2008 로 컴파일한게 가장 근접하긴 한데,
여기서는 왜 복사생성자와 소멸자가 하나 덜 나왔을까요??
고수님들 답변 부탁드립니다.ㅜ.ㅜ

익명 사용자의 이미지

RVO입니다.