본문 바로가기

Deep Copy

파이썬 데이터 깊은 복사(Deep Copy)와 얕은 복사(Swallow Copy) 데이터를 복사할 때 깊은 복사(Deep Copy)와 얕은 복사(Swallow Copy)가 존재합니다.C++에서는 포인터 등의 얕은 복사는 여러 문제를 야기하는 요인 중 하나입니다.C++에서 힙에 생성한 메모리를 해제된 이후에 다른 변수에서 참조하면 문제가 발생하게 됩니다.깊은 복사와 얕은 복사의 메모리 개념은 아래의 포스팅의 이미지를 참조하면 됩니다.2015/01/14 - [Programming/C&C++] - 얕은 복사(Shallow Copy) vs 깊은 복사(Deep Copy)앝은 복사는 다른 변수가 동일한 메모리를 가리키게 됩니다.파이썬에서 리스트를 대입해서 생성하는 경우 얕은 복사가 발생하게 됩니다. myList1 = [1, 2, 3, 4] myList2 = myList1 print(hex(id(.. 더보기
얕은 복사(Shallow Copy) vs 깊은 복사(Deep Copy) 객체를 생성하고 대입하게 되면 복사 생성자가 호출되어 값을 복사하게 됩니다.클래스의 복사 생성자는 별도로 정의하지 않아도 생성되는 특수한 함수입니다.이렇게 기본적으로 내부에 생성되는 복사 생성자는 int 등의 타입에는 정상적으로 동작합니다.하지만 다음과 같이 포인터 등을 사용할 경우에는 문제가 발생할 소지가 있습니다. #include #include class Person { public: Person(int nAge, char* pName) { m_Age = nAge; int nLen = strlen(pName) + 1; m_Name = new char[nLen]; strncpy(m_Name, pName, nLen); } ~Person() { if (nullptr != m_Name) { delete[].. 더보기