본문 바로가기
{Programing}/C.C++

c/c++ 복사생성자 & 복사 대입연산자

by 탱타로케이 2020. 1. 22.

복사 생성자 

객체 생성시에 인자값으로 같은 클래스 객체를 넘겨주거나

객체 생성시에 같은 클래스 객체를 대입하려 한다면 호출되는 생성자.

오버로딩되어있지 않으면

컴파일러가 자동 생성함.

 

기본 복사생성자 : 컴파일러가 자동생성하는 복사생성자. 얕은 복사를 기본으로함.

 

 

얕은 복사 : 각 멤버 변수에 할당된 값만 복사. 동적 할당된 메모리까지 복사하지는 않음.

즉, 포인터의 주소만 가져올뿐, 본 객체에서 할당된 메모리에 저장된 값까진 복사하지 않음.

 

깊은 복사 : 동적 할당된 메모리에 저장된 값까지 복사. 

 

인자값으로 해당 객체의 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

댓글