복사생성자
자신과 같은 타입의 객체를 받아 초기화하는 것
디폴트 복사생성자


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


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


복사생성자 선언 후 구현하지 않는다.
복사하지 않았을 경우 에러가 나지 않는다.


복사생성 시 컴파일 에러가 난다.
묵시적 형변환 방지(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 |