복사생성자
Programming/C++ 2015. 5. 13. 15:05기본 복사 생성자
- 기본적으로 제공되는 생성자 중 하나이다.
- 객체간의 변수의 값을 복사해준다
- 호출시키는 객체의 선언과 동시에 초기화할 때 발생함
복사 생성자의 호출 시점
- 기존에 생성된 객체를 이용해서 새로운 객체를 초기화 하는 경우
- Call-By-Value 방식의 함수호출 과정에서 객체를 인자로 전달하는 경우
- 객체를 반환하는데, 참조형으로 반환하지 않는 경우
** 멤버 대 멤버의 복사에 사용되는 원본을 변경시키는 것은 복사의 개념을 무너트리는
행위가 되므로 const 를 사용해서 예방하는게 좋을듯..
자동으로 삽입되는 디폴트 복사생성자
- 복사 생성자를 정의하지 않으면 디폴트 복사 생성자가 자동으로 삽입된다.
** 변환에 의한 초기화는 explicit로 막을 수 있다.
explicit 키워드를 쓰게되면 복사 생성자가 묵시적으로 호출될 때 묵시적 형변환을 막아준다.
explicit 키워드를 쓰게되면 코드가 더욱 명확함을 더해줄것이다.
메모리 공간의 할당과 초기화가 동시에 일어나지 않는 상황
Ex 1 )
int SimpleFunc(int n)
{
...................
}
int main(void)
{
int num = 10;
// 호출되는 순간 매개변수가 할당과 동시에 초기화가 된다.
SimpleFunc(num);
}
Ex 2)
int SimpleFunc(int n)
{
..............
return n; // 반환하는 순간 메모리 공간 할당되면서 동시에 초기화한다.
}
int main(void)
{
int num = 0;
cout << SimpleFunc(num) << endl;
}
Ex2 의 경우에 정수를 반환하는 과정에서 메모리 공간이 할당된다고 한다.
*** 함수가 값을 반환하면, 별도의 메모리공간이 할당되는데, 이 공간에 반환 값이 저장된다.
(반환 값으로 초기화가 된다.)
할당 이후에 복사생성자를 통한 초기화
'Programming > C++' 카테고리의 다른 글
동적 메모리 해제 매크로 (0) | 2015.05.15 |
---|---|
깊은 복사와 얕은 복사 (0) | 2015.05.13 |
클래스와 배열 (0) | 2015.05.13 |
캡슐화(Encapsulation) (0) | 2015.05.12 |
const 함수 (0) | 2015.05.12 |