티스토리 뷰
[Cpp] 얕은 복사 vs 깊은 복사
shallow copy와 deep copy가 어떻게 다른지 알아보자
얕은 복사(Shallow Copy)
한 객체의 모든 멤버 변수의 값을 다른 객체로 복사
깊은 복사(Deep Copy)
모든 멤버 변수의 값뿐만 아니라, 포인터 변수가 가리키는 모든 객체에 대해서도 복사
struct Test {
char *ptr;
};
void shallow_copy(Test &src, Test &dest) {
dest.ptr = src.ptr;
}
void deep_copy(Test &src, Test &dest) {
dest.ptr = (char*)malloc(strlen(src.ptr) + 1);
strcpy(dest.ptr, src.ptr);
}
shallow_copy를 사용하면, 객체 생성과 삭제에 관련된 많은 프로그래밍 오류가 프로그램 실행 시간에 발생할 수 있다.
즉, 얕은 복사는 프로그래머가 스스로 무엇을 하는 지 잘 이해하고 있는 상황에서 주의하여 사용해야 한다
대부분, 얕은 복사는 실제 데이터를 복제하지 않고서, 복잡한 자료구조에 관한 정보를 전달할 때 사용한다. 얕은 복사로 만들어진 객체를 삭제할 때는 조심해야 한다.
실제로 얕은 복사는 실무에서 거의 사용되지 않는다. 대부분 깊은 복사를 사용해야 하는데, 복사되는 자료구조의 크기가 작으면 더욱 깊은 복사가 필요하다.
'Dev > C++' 카테고리의 다른 글
C/C++에서 특정 비트를 0, 1로 바꾸는 방법 (0) | 2020.08.06 |
---|---|
[C++] C++ 프로그램의 구조 (0) | 2020.07.18 |
[C++] 포인터(Pointer) vs 레퍼런스(Reference) (0) | 2020.07.17 |
[C++] 가상 함수(Virtual Function) (0) | 2020.05.22 |
STL(Standard Template Library) 표준 C++ 라이브러리 (0) | 2020.04.03 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크