얕은

    C++ 얕은 복사 깊은 복사 (Shallow/Deep Copy)

    아래와 같이 코드를 작성하면 a1 객체와 a2 객체가 서로 같은 int형에 대한 포인터 변수를 공유하기 때문에 이미 해제된걸 재해제 하기 때문이다. #include using namespace std; class A { int* ptr = nullptr; public: A() { ptr = new int(); } A(const A& Ref) { this->ptr = Ref.ptr; } ~A() { delete ptr; } }; int main() { // 기본 생성자 호출 A a1; // 복사 생성자 호출 A a2(a1); } 이를 해결하기 위해선 ptr를 참조 대상값 가지고서 재 할당 해줘야한다. #include using namespace std; class A { int* ptr = nullptr;..

    C# 얕은 복사 깊은 복사

    Object.MemberwiseClone 은 shallow copy 를 생성하며, ICloneable interface와 함께 사용하면 deep copy 을 얻을 수 있다. MemberwiseClone 는 새로운 객체를 생성 한 다음, 새로운 객체는 현재 오브젝트의 필드를 copy 하여 단순 복사본을 생성한다. 그리고 필드가 value type 이면 bit-by-bit copy (bit 별 복사)가 수행된다. 필드가 reference type 인 경우 reference 가 복사되지만 reference 된 객체는 복사되지 않는다. 이로 인해 원본 객체와 새로운 개체의 복제본은 동일한 객체를 참조하게 된다. 아래 그림 처럼 shallow clone 은 reference 형태를 가진 객체만 복사가 안된다는 점..