noname02
복사생성자와 객체의 반환 본문
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #include <iostream> using namespace std; class SoSimple { private: int num; public: SoSimple(int n) : num(n) { cout << "New Object : " << this << endl; } SoSimple(const SoSimple& copy) : num(copy.num) { cout << "New Copy obj : " << this << endl; } ~SoSimple() { cout << "Destroy obj : " << this << endl; } }; SoSimple SimpleFuncObj(SoSimple ob) { cout << "Parm ADR: " << &ob << endl; return ob; } int main(void) { SoSimple obj(7); SimpleFuncObj(obj); cout << "**" << endl; SoSimple tempRef = SimpleFuncObj(obj); cout << "Return Obj" << &tempRef << endl; return 0; } | cs |
//콘솔 라인
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | L:31로 obj객체를 생성했다.(여기서 num7은 큰 의미가 없음) L:32로 L:23의 매개변수 객체 ob가 생성되는데, 이 때 obj를 통해 복사했다. L:25가 실행된다. L:26으로 인해 ob의 임시객체가 생성된다. L:32에 의해 생성된 객체가 사라지고(함수 종료에 의해) L:26으로 생성된 ob의 임시객체 또한 사라진다. L:34로 구분 L:35에서 SimpleFuncObj(obj)로 인해 위와 같은 일이 다시 반복된다.우선 매개변수 객체 ob를 생성한다. L:25가 실행된다. L:26으로 인해 ob의 임시객체가 생성된다. L:35가 실행되면서 실행되기 직전 ob의 임시객체가 사라진다. L:35가 실행 main함수가 종료되면서 객체 tempRef가 사라지고 객체 obj가 사라졌다. | cs |
여기서 SoSimple tempRef = SimpleFuncObj(obj); 줄을 살펴보면,
개인적으로 맨 처음 들었던 생각은 SimpleFuncObj(obj)로 인해 반환된 임시객체ob를 받기위해
tempRef 객체를 새로 생성할 거라고 생각했지만, 그것이 아니라
단순히 반환된 임시객체 ob를 그대로 tempRef로 받아들였다. 마치 '참조'와 같이 말이다.
'Study > C++' 카테고리의 다른 글
for문의 배열기반 조건 (0) | 2015.05.13 |
---|---|
전위,후위증가 연산자 오버로딩 (0) | 2015.05.09 |
const 키워드 (0) | 2015.04.11 |
생성자 (0) | 2015.04.10 |
소멸자의 호출 시기 (0) | 2015.04.10 |
Comments