2017-04-12 11 views
0

오브젝트 1을 가리키는 포인터가있는 오브젝트가 있다고 가정 해보십시오.진정한 "딥 카피"를 수행 할 때 얼마나 깊이 들어가십니까?

오브젝트 1이 포인터가 아닌 경우 오브젝트 1의 오브젝트 2를 복제하고 새 포인터 b를 작성한다는 것을 알고 있습니다. 포인터 2는 원래 오브젝트의 사본에있는 포인터입니다.

딥 복사가 작동하는 방식입니다.

개체 1이 다른 개체를 가리키는 포인터 인 경우 어떻게됩니까? 전체 복사본을 만들기 위해이 두 개체의 복사본을 만드십니까? 아니면 그냥 "첫 번째 수준의"개체?

사실 깊은 복사를 수행 할 때 본질적으로 얼마나 깊이 가십니까? 나는 가능한 한 깊게 가서 모든 것을 복사한다고 가정하지만, 나는 두 번 확인하고 싶다.

감사합니다.

답변

0

원칙적으로 진정한 "딥 카피"는 모든 것을 복사합니다. 모든 중첩 된 객체를 반복적으로 복제합니다.

그러나 이것은 항상 실용적이거나 바람직한 것은 아닙니다. 그것은 당신의 특정 상황에 따라 달라집니다 : 데이터 구조가 사이클을 포함하거나 동일한 개체를 여러 번 참조하는 경우

  • , 당신은 추적하고 어떻게 든이 문제를 처리해야합니다 또는 복사가 무한대로 계속

  • 일부 개체는 복사본을 만들지 않고 (예 : 불변 인 경우) 포인터로 참조하기에 "안전"할 수 있으므로 복사하는 것이 낭비 일 수 있습니다. 복사 과정에서 특별히 면제하고 싶을 수도 있습니다.

+0

제가 생각한 것을 확인해 주셔서 감사합니다. 내가 전에 보지 못했던 것을 고려해 볼 흥미로운 사례를 제기합니다. 그들을 지적 해 주셔서 감사합니다. – User