복사생성자

자신과 같은 타입의 객체를 받아 초기화하는 것

 

 

디폴트 복사생성자

복사생성자가 없어도 기본복사생성자가 호출된다.

 

 

복사생성자 선언

명시적으로 복사생성자를 호출할 수 있다.

 

 

복사생성 방지

복사생성자 선언 후 구현하지 않는다.

복사하지 않았을 경우 에러가 나지 않는다.

 

복사생성 시 컴파일 에러가 난다.

 

 

묵시적 형변환 방지(explicit)

explicit 키워드를 통해 자동으로 형변환되는 것을 방지할 수 있다.

 

 

얕은 복사

player2와 player1이 모두 같은 변수의 주소를 가리키고 있다.

변수를 수정하면 두 클래스 모두 영향을 받는다.

또한 할당한 메모리를 제거하고 있지 않아 메모리 누수가 난다.

 

소멸자에서 메모리 할당을 해제하면

두 클래스의 m_iHealth값이 같으므로

먼저 소멸자가 호출된 클래스는 정상적으로 작동하지만

다음 소멸자가 호출된 클래스는 주소를 가리키고 있지만

접근 권한이 없어 런타임 에러가 나게 된다.

 

 

깊은 복사

복사 생성 시 새롭게 할당해 새로운 주소값을 가리키도록 한다.

소멸 시에도 정상적으로 메모리를 해제한다.

 

 

 

'C++' 카테고리의 다른 글

[C++] const  (0) 2023.05.13
[C++] 복사대입연산자  (0) 2023.05.12
[C++] 소멸자  (1) 2023.05.10
[C++] 생성자  (0) 2023.05.09
[C++] 오버로딩  (0) 2023.05.08

+ Recent posts