> 백엔드 개발 > C++ > 본문

전체 복사와 얕은 복사: 언제 데이터를 복제해야 합니까?

Mary-Kate Olsen
풀어 주다: 2024-10-30 00:15:02
원래의
688명이 탐색했습니다.

  Deep Copy vs. Shallow Copy: When Do I Need to Clone the Data?

깊은 복사본과 얕은 복사본: 자세히 살펴보기

객체 지향 프로그래밍에서는 깊은 복사본과 얕은 복사본의 차이점을 이해하는 것이 중요합니다. . 구분을 명확히 하기 위해 개념을 자세히 살펴보겠습니다.

얕은 복사본

얕은 복사본은 원본 개체와 동일한 개체를 참조하는 새 개체를 생성합니다. 즉, 개체 중 하나가 변경되면 원본 개체와 복사된 개체 모두에 영향을 미칩니다.

다음 예를 고려하세요.

<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿