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

2020. 1. 22. 14:01{Programing}/C.C++

복사 생성자 

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

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

오버로딩되어있지 않으면

컴파일러가 자동 생성함.

 

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

 

 

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

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

 

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

 

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