#include<iostream>
using namespace std;
class AAA
{
public:
int num;
public:
AAA(int n) : num(n)
{ }
};
AAA func1()
{
AAA a2(5);
return a2;
}
int func2()
{
int num=3;
return num;
}
int main(void)
{
AAA & ref1 = func1();
int & ref2 = func2();
cout<<ref1.num<<endl;
cout<<ref2<<endl;
return 0;
}
ref1으로는 값을 찍을 수 있고, ref2는 값을 찍을 수 없음.
func1 함수 내에서 반환하는 a2는, AAA형으로 반환이 되면서 임시객체가 만들어지고,
그 임시객체의 참조값이 리턴된다고 해.
그리고 그 참조값을 AAA & ref1으로 받게되면, 임시객체는 바로 소멸되지 않고 ref1으로 계속 쓸 수 있어
근데
func2 함수에서 객체가 아닌 일반 자료형 변수를 반환하는 상황에서는
똑같이 임시변수가 만들어지고, 임시변수의 참조값이 리턴되어서, cout에 값을 출력할 것 같은데
출력이 되질 않는데 왜그럴까.
'C++ > 공개글' 카테고리의 다른 글
static binding과 dynamic binding (0) | 2013.01.26 |
---|---|
Polymorphism의 조건 (0) | 2013.01.26 |
상속과 포함 관계에서의 객체 생성 순서 (0) | 2013.01.26 |
가상함수는 언제 사용하는가 (0) | 2013.01.26 |
객체와 일반자료형의 반환과 참조 (0) | 2013.01.26 |