복사 생성자
객체 생성시에 인자값으로 같은 클래스 객체를 넘겨주거나
객체 생성시에 같은 클래스 객체를 대입하려 한다면 호출되는 생성자.
오버로딩되어있지 않으면
컴파일러가 자동 생성함.
기본 복사생성자 : 컴파일러가 자동생성하는 복사생성자. 얕은 복사를 기본으로함.
얕은 복사 : 각 멤버 변수에 할당된 값만 복사. 동적 할당된 메모리까지 복사하지는 않음.
즉, 포인터의 주소만 가져올뿐, 본 객체에서 할당된 메모리에 저장된 값까진 복사하지 않음.
깊은 복사 : 동적 할당된 메모리에 저장된 값까지 복사.
인자값으로 해당 객체의 const refrence 가 필요하며, 복사중에 대상 객체가 변경되는것을 막고, 중첩해서 복사생성자가 호출되는 것을 막기 위함..
복사생성자 호출되는 경우
1. 객체를 생성할때, 기존에 생성된 객체를 이용해 초기화 할때.
2. 함수 인자로 객체를 값전달 할 때.
3. 함수 반환시 객체를 값 반환 할 경우.
복사 대입연산자 : 대입연산자 ( = ) 를 오버로딩 해서 객체의 깊은 복사를 처리하는 사용자 정의 연산자. 복사생성자와 마찬가지로 컴파일러에 의해 기본으로 생성된다.
인자값으로는 복사생성자와 마찬가지로 const refrence를 사용하며
반환형으로 refrence를 사용한다.
반환형이 refrence 인 이유는 연속대입을 위함이다.
호출 경우
1. 이미 생성된 객체에 다른 객체를 대입하는 경우.
깊은 복사는 동적할당된 포인터들은 항상 메모리 복사로 복사함.
memcpy
'{Programing} > C.C++' 카테고리의 다른 글
c/c++ c확장 - 입출력, 인라인 함수, namespace (0) | 2020.01.22 |
---|---|
c/c++ 연산자 오버로딩 (0) | 2020.01.22 |
c/c++ 예외처리 (0) | 2020.01.21 |
c/c++ virtual, interface, abstract class (0) | 2020.01.21 |
c/c++ 상속(2) (0) | 2020.01.21 |
댓글