SYNOPSIS
void destruct(object ob)
BESCHREIBUNG
Zerstoert und entfernt das Objekt ob. Ist ob == 0 (ob wurde schon
zerstoert), so passiert nichts. Nach dem Aufruf von destruct()
existieren keine globalen Variablen mehr, sondern nur noch lokale
Variablen und Argumente.
Wenn sich ein Objekt selbst zerstoert, wird die Ausfuehrung nicht
sofort abgebrochen. Wird die Efun this_object() aufgerufen, so
liefert diese 0 zurueck.
Die meisten Mudlibs moegen es nicht, wenn andere Objekte mittels
destruct() ins Daten-Nirwana geschickt werden. Stattdessen erwarten
sie den Aufruf einer speziellen Lfun im zu zerstoerenden Objekt,
welche normalerweise remove() heisst. Damit kann das zu
zerstoerende Objekt noch abschliessende Arbeiten im Zusammenhang
mit seinem Ableben erledigen, wie z. B. die Anpassung des Gewichtes
seiner Umgebung etc. pp.
Der Interpreter zerstoert das Objekt nicht sofort, sondern er
markiert es als zerstoert, entfernt es von der Liste, die alle
Objekte enthaelt, und fuegt es zu der Liste zu zerstoerenden
Objekte hinzu. Die tatsaechliche Zerstoerung geschieht erst dann,
wenn keine Referenzen mehr auf das Objekt existieren. Deshalb ist
es moeglich, dass ein Objekt noch lange nach seiner Zerstoerung
Speicher belegt, obwohl es von ausserhalb nicht mehr gefunden wird.
BEISPIELE
ob->remove();
if(ob) // es existiert noch, vielleicht ist die Lfun
// remove() nicht definiert?
destruct(ob);
Dies ist die Standard-Methode, ein Objekt zu zerstoeren, ihm aber
vorher noch die Chance zu geben, es selber zu tun.
GESCHICHTE
LDMud 3.2.7: 0 (zerstoerte Objekt) als Argument annehmen.
SIEHE AUCH
clone_object(E), remove(A)
|