깊은 복사본과 얕은 복사본: 자세히 살펴보기
객체 지향 프로그래밍에서는 깊은 복사본과 얕은 복사본의 차이점을 이해하는 것이 중요합니다. . 구분을 명확히 하기 위해 개념을 자세히 살펴보겠습니다.
얕은 복사본
얕은 복사본은 원본 개체와 동일한 개체를 참조하는 새 개체를 생성합니다. 즉, 개체 중 하나가 변경되면 원본 개체와 복사된 개체 모두에 영향을 미칩니다.
다음 예를 고려하세요.
<code class="cpp">class X { private: int i; int *pi; public: X() : pi(new int) {} X(const X& copy) : i(copy.i), pi(copy.pi) {} };</code>
이 시나리오에서 pi 멤버는 동일한 개체를 가리킵니다. 원본 및 복사된 X 객체 모두의 정수입니다.
Deep Copy
반대로, 전체 복사는 새 객체를 생성하고 원본 객체의 모든 구성원을 복제합니다. 원본 개체와 복사된 개체 사이에는 공유 개체가 없습니다.
수정된 예는 다음과 같습니다.
<code class="cpp">class X { private: int i; int *pi; public: X() : pi(new int) {} X(const X& copy) : i(copy.i), pi(new int(*copy.pi)) {} };</code>
이 경우 원본 개체와 복사된 X 개체의 pi 멤버는 다른 정수를 가리킵니다. 객체이지만 둘 다 동일한 값을 포함합니다.
복사 생성자
객체의 복사본을 만들 때 복사 생성자가 사용됩니다. 기본 복사 생성자(프로그래머가 명시적으로 정의하지 않은 경우)는 일반적으로 자체 사용자 지정 복사 생성자가 있는 멤버를 제외하고 얕은 복사를 수행합니다.
그러나 복사 생성자의 동작이 다음과 같은 결과를 가져올 수 있다는 점에 유의하는 것이 중요합니다. 포함된 특정 데이터 멤버에 따라 달라집니다. 일부 회원은 깊은 복사, 얕은 복사 또는 이들의 조합을 수행할 수 있습니다.
위 내용은 전체 복사와 얕은 복사: 언제 데이터를 복제해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!