이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date |
2011/05/22 21:26:14 |
Name |
RealWorlD |
Subject |
C++ 복사생성자 질문 |
복사생성자를 공부하는 중 질문이있습니다.
복사 생성자가 호출되는 시점은 다음과 같이 세가지입니다.
1. 기존에 생성된 객체를 이용해 새로운 객체를 초기화 하는경우
2.call-by-value 방식의 함수호출 과정에서 객체를 인자로 전달하는 경우
3.객체를 반환하되, 참조형으로 반환하지 않는 경우
이때 3번에 대하여 좀 헷갈리는데요
예를 들어 int ss(int a) { cout<<endl; } 이런 함수가 있을경우 메인에서 ss(3); 이 호출되는 순간 매개변수 a의 할당과 동시에 3으로 초기화 되잖아요
그래서 2번은 이해했습니다.
그런데 3번은 int ss(int a) { cout<<endl; return a; } 일 경우 a가 반환하는 순간 메모리 공간이 할당되면서 동시에 초기화 라고하는데요
반환할때 메모리 공간할당, 초기화 된다는 것을 이해가 갑니다. 반환된 값을 저장할 곳이 필요하니까요.
제가 궁금한것은 3번 예제같은경우 매개변수 a가 메모리공간 할당과 동시에 초기화가 두번 일어나는건가요? 2번과 연동해서 보면 그렇게 이해가되는데.. 2번 할당이 말이안되므로 내가 이해를 잘못하고있는것같은데 뭐가 잘못된건지..
왜 두번일어나냐고 생각하냐면 메인에서 ss(3); 으로 호출과동시에 int a에 메모리할당과 초기화가 일어났는데 리턴 a 하면 또 메모리 할당과 초기화를 한다? 뭔소린지..;;ㅠㅠ
|
통합규정 1.3 이용안내 인용
"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
|