noname02

복사생성자와 객체의 반환 본문

Study/C++

복사생성자와 객체의 반환

kimtaku 2015. 4. 10. 22:32


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