c++

C++ 개인 필기(15완) 복사

Voitcon 2024. 3. 4. 18:53

클래스 객체 생성시에

Warrior W -> 기본생성자 호출

Warrior W1=W ->만듦과 동시에 복사 (복사 생성자)

Warrior W2 ->기본

W2=W -> 복사대입연산자

복사 생성자 + 복사 대입 연산자 -> 컴파일러가 암시적으로 만들어줌 (메모리에 있는 데이터 그대로 복사)

class Warrior{

public:

Sword SW; ->포인터로 하지 않을시 워리어와 검이 서로 일치하여 생성, 소멸이 같이됨.

}

생명 주기 관리가 어려워진다. (클래스 내에 다른 클래스를 가질땐 포인터나, 참조 값 추천)

 

복사 생성자, 복사 대입 연산자 -> 주소값 즉 메모리 자체를 그대로 복사

(얕은 복사) 멤버 데이터를 비트열 단위로 복사 (메모리영역 그대로 복사)

포인터 주소값 -> 주소값을 복사 -> 동일한 객체를 가르킴

생성자내에서 new Sword 나 delete Sword를 하면 해당 클래스의 객체가 딜리트를 3번해서 더블프리 문제 발생

-얕은 복사 문제

깊은 복사 -> 멤버 데이터가 참조값이라면, 데이터를 새로 만들어준다 (원본 객체가 참조하는 대상까지 새로 만들어서 복사)

깊은 복사 -> 완벽히 복사 -> 포인터는 주소값 -> 새로운 객체를 생성 ->상이한 객체를 가리키는 상태

오버로딩 -> 명시적 복사 생성자

 

암시적 복사 생성자 

1) 부모 클래스의 복사 생성자 호출

2) 멤버클래스의 복사 생성자 호출

3) 멤버가 기본타입일 경우 메모리복사 (얕은 복사)

 

명시적 복사 생성자

1) 부모클래스의 기본 생성자 호출

2) 멤버 클래스의 기본 생성자 호출

 

암시적 복사 대입 연산자

1) 부모클래스 복사대입 연산자 호출

2) 멤버클래스의 복사대입 연산자 호출

3) 멤버가 기본타입일 경우 메모리 복사 (얕은 복사)

 

명시적 복사 대입 연산자

알아서 해주는 것이 없다,

 

복사를 한다는 것 -> 두 객체의 값들을 일치시킴

따라서 기본적으로 얕은 복사 방식으로 동작

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

C++ 개인 필기(14) 변환  (0) 2024.02.26
C++ 개인 필기(13) 동적 할당  (0) 2024.02.14
C++ 개인 필기(12) static  (1) 2024.02.13
C++ 개인 필기(11) 클래스의 연산자  (0) 2024.02.07
C++ 개인 필기(10) 초기화 리스트  (0) 2024.02.06