일부 세부 정보가 삭제되었습니다. 특히, 생성자는 DataStructure
객체를 동적으로 할당하고 소멸자는 객체를 할당 해제합니다. 이동 중에 하나의 Widget
에서 다른 포인터로 복사 한 경우 Widget
두 포인터는 동일한 DataStructure
개체에 대한 포인터를 갖습니다. 그런 다음 그 물체가 파괴되면 그들은 모두 delete
으로 시도합니다. 이렇게하면 정의되지 않은 동작이 발생합니다. 이를 피하기 위해 이동되는 Widget
의 내부 포인터는 nullptr
으로 설정됩니다.
이동 생성자를 구현할 때의 표준 패턴입니다. 하나의 오브젝트에서 다른 오브젝트로 동적으로 할당 된 일부 오브젝트의 소유권을 이동하려는 경우 원래 오브젝트가 할당 된 오브젝트를 더 이상 소유하지 않도록해야합니다.
도식적으로, 당신은 다른 하나의 Widget
에서 DataStructure
의 소유권을 이동하고자하는이 상황에 시작 : 당신은 그냥 포인터를 복사 한 경우
┌────────┐ ┌────────┐
│ Widget │ │ Widget │
└───╂────┘ └────────┘
┃
▼
┌───────────────┐
│ DataStructure │
└───────────────┘
, 당신은 할 것 :
┌────────┐ ┌────────┐
│ Widget │ │ Widget │
└───╂────┘ └───╂────┘
┗━━━━━━━━┳━━━━━━━┛
▼
┌───────────────┐
│ DataStructure │
└───────────────┘
당신이 다음
nullptr
원래
Widget
포인터를 설정하면
, 당신은 :
┌────────┐ ┌────────┐
│ Widget │ │ Widget │
└────────┘ └───╂────┘
┃
▼
┌───────────────┐
│ DataStructure │
└───────────────┘
소유권이 성공적으로 이전되었으며 정의되지 않은 동작을 일으키지 않고 Widget
을 모두 삭제할 수 있습니다.
당신이 그것을 년후 경우 그 포인터를 확보하려고했을 제거 소멸자가 거기에 모두가 좋은 nullptr 가하는 것도 삭제하지 않습니다 개간 된거야? – user2357112
두 개체 구성원이 같은 메모리 위치를 가리키고 있지 않도록 ... – HadeS
링크에 유료 로그인이 필요합니다. :((또한, "스킬 스매쉬 (skill smatter)"와 같은 소리가 들리면 "스킬 넘치는 스킬"을 얻을 수 있습니다.) – Potatoswatter