티스토리 뷰

Dev/C++

[C++] 얕은 복사(Shallow Copy) vs 깊은 복사(Deep Copy)

꿈을 위해 잠을 잊은 그대에게 2020. 5. 21. 23:16

[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를 사용하면, 객체 생성과 삭제에 관련된 많은 프로그래밍 오류가 프로그램 실행 시간에 발생할 수 있다.

 

즉, 얕은 복사는 프로그래머가 스스로 무엇을 하는 지 잘 이해하고 있는 상황에서 주의하여 사용해야 한다

대부분, 얕은 복사는 실제 데이터를 복제하지 않고서, 복잡한 자료구조에 관한 정보를 전달할 때 사용한다. 얕은 복사로 만들어진 객체를 삭제할 때는 조심해야 한다.

 

실제로 얕은 복사는 실무에서 거의 사용되지 않는다. 대부분 깊은 복사를 사용해야 하는데, 복사되는 자료구조의 크기가 작으면 더욱 깊은 복사가 필요하다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크