int main() {
Test a; //생성자 호출
Test b(a); //복사생성자 호출
Test c = a; //복사생성자 호출
a = b; //복사대입연산자 호출
return 0;
}
클래스를 만들 때 복사 생성자 및 복사대입 연산자는 따로 만들어주는 것이 좋습니다.
만약 그렇지 않을 경우 C++에서는 c = a; 같은 코드를 보면 얕은 복사를 실행하게 되는데 이렇게 되면 해당 클래스 c와 a의 포인터 멤버 변수가 있을 경우 같은 객체를 가리키게 됩니다.
이렇게 했을 때 c 또는 a의 클래스에서 포인터 멤버 변수가 가리키고 있는 객체를 삭제하게 되면
나머지 클래스의 포인터 멤버 변수는 존재하지 않는 객체를 가리키게 되는 문제가 발생합니다.
따라서 직접 복사 생성자 및 복사대입 연산자를 정의해줘야합니다.
얕은 복사 : 서로 같은 주소값으로 복사합니다.
깊은 복사 : 각각의 고유 주소값을 가지면서 복사합니다.
'C,C++ > 공부 낙서' 카테고리의 다른 글
공부하면서 빠트린 것들 끄적끄적 - 람다 (0) | 2022.11.21 |
---|---|
공부하면서 빠트린 것들 끄적끄적 - 컴파일타임, 런타임 (0) | 2022.11.18 |
공부하면서 빠트린 것들 끄적끄적 - 템플릿, 타입ID (0) | 2022.11.16 |
공부하면서 빠트린 것들 끄적끄적 - 가상함수, 형변환 (0) | 2022.11.15 |
공부하면서 빠트린 것들 끄적끄적 - 헤더 참조 (0) | 2022.11.07 |