Einige Details der Klasse wurden entfernt. Insbesondere weist der Konstruktor das DataStructure
-Objekt dynamisch zu, und der Destruktor hebt es auf. Wenn Sie während einer Verschiebung gerade den Zeiger von einem Widget
zu einem anderen kopiert haben, hätten beide Widget
s Zeiger auf dasselbe zugewiesene DataStructure
Objekt. Dann, wenn diese Objekte zerstört werden, würden sie beide versuchen, delete
es. Dies würde zu undefiniertem Verhalten führen. Um dies zu vermeiden, muss der interne Zeiger des Widget
, von dem verschoben wird, auf nullptr
gesetzt werden.
Dies ist ein Standardmuster bei der Implementierung eines Move-Konstruktors. Sie möchten das Eigentumsrecht für einige dynamisch zugewiesene Objekte von einem Objekt auf ein anderes übertragen. Daher müssen Sie sicherstellen, dass das ursprüngliche Objekt nicht mehr die zugeordneten Objekte besitzt.
zeigt schematisch, beginnen Sie mit dieser Situation aus, das Eigentum an der DataStructure
von einem Widget
zum anderen bewegen wollen:
┌────────┐ ┌────────┐
│ Widget │ │ Widget │
└───╂────┘ └────────┘
┃
▼
┌───────────────┐
│ DataStructure │
└───────────────┘
Wenn Sie den Mauszeiger einfach kopiert, dann würden Sie haben:
┌────────┐ ┌────────┐
│ Widget │ │ Widget │
└───╂────┘ └───╂────┘
┗━━━━━━━━┳━━━━━━━┛
▼
┌───────────────┐
│ DataStructure │
└───────────────┘
Wenn Sie dann den ursprünglichen Widget
Zeiger auf nullptr
gesetzt, Sie haben:
┌────────┐ ┌────────┐
│ Widget │ │ Widget │
└────────┘ └───╂────┘
┃
▼
┌───────────────┐
│ DataStructure │
└───────────────┘
Das Eigentumsrecht wurde erfolgreich übertragen und beide Widget
s können zerstört werden, ohne ein undefiniertes Verhalten zu verursachen.
Gibt es eine destructor Sie, dass der Zeiger zu frei hätte entfernt versucht, wenn es wasn Bin nicht geklärt? – user2357112
so dass keine zwei Objekte Mitglieder auf die gleichen Speicherorte zeigen ... – HadeS
Der Link erfordert eine kostenpflichtige Anmeldung. :((Es klingt auch wie ein "Skill smatter" ist ein Prozess, der Ihnen ein "Überangebot an Fähigkeiten" geben würde.) – Potatoswatter