얕은 복사(shallow copy)
대입연산자를 활용해서 두 개의 포인터가 같은 위치를 공유하는 것을 의미
#include <iostream>
using namespace std;
int main() {
int* A = new int(2);
// 포인터 B에 A가 가리키는 메모리를 공유
int* B = A;
cout << *A << endl; // 출력: 2
cout << *B << endl; // 출력: 2
// A 동적 메모리를 해제
delete A;
//Undefined behavior 오류 발생
cout << *B << endl; // dangling pointer
return 0;
}
두 개의 포인터가 같은 위치를 공유하니 하나의 포인터에서 메모리를 해지시키면 다른 한 쪽에서 사용불가함.
(청소 빗자루를 2명이 사용하는데 한명이 버리면 다른 한명은 사용 못하는 것처럼)
dangling pointer가 발생할 수 있는 복사입니다.
깊은 복사(Depp Copy)
서로 다른 메모리 영역을 할당해서 위치를 공유 하는 것이 아닌 값을 복사하는 것을 말합니다.
하나가 해지해도 다른 하나는 해지되지 않습니다.
즉 dangling pointer가 발생할 수 없습니다.
#include <iostream>
using namespace std;
int main() {
int* A = new int(2);
// 포인터 B가 A가 가리키는 값을 복사 (깊은 복사)
// 그냥 새로 만드는것에 값만 넣어준 격
int* B = new int(*A);
cout << *A << endl; // 출력: 2
cout << *B << endl; // 출력: 2
// A가 동적 메모리를 해제
delete A;
// B는 여전히 자신의 메모리를 관리
cout << *B << endl; // 출력: 2
// B의 메모리도 해제
delete B;
return 0;
}
포인터와 복사 개념을 통해
메모리 관리를 하는 방법을 배웠습니다.
'개발공부' 카테고리의 다른 글
2024 - 12 -24 객체지향적 설계 (2) | 2024.12.24 |
---|---|
2024-12-23 c++ 함수 오버로딩, 템플릿 (1) | 2024.12.23 |
2024 -12 - 23 c++ 자원 관리 (0) | 2024.12.23 |
2024 - 12 - 20 Unreal (오버랩) (0) | 2024.12.20 |
2024- 12 -20 Unreal (애니메이션 블루 프린트, 블렌드 스페이스) (0) | 2024.12.20 |