blob: f64de56c854b4962a1899ed12a89e0050d0bf37e [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001SYNOPSIS
2 void destruct(object ob)
3
4BESCHREIBUNG
5 Zerstoert und entfernt das Objekt ob. Ist ob == 0 (ob wurde schon
6 zerstoert), so passiert nichts. Nach dem Aufruf von destruct()
7 existieren keine globalen Variablen mehr, sondern nur noch lokale
8 Variablen und Argumente.
9
10 Wenn sich ein Objekt selbst zerstoert, wird die Ausfuehrung nicht
11 sofort abgebrochen. Wird die Efun this_object() aufgerufen, so
12 liefert diese 0 zurueck.
13
14 Die meisten Mudlibs moegen es nicht, wenn andere Objekte mittels
15 destruct() ins Daten-Nirwana geschickt werden. Stattdessen erwarten
16 sie den Aufruf einer speziellen Lfun im zu zerstoerenden Objekt,
17 welche normalerweise remove() heisst. Damit kann das zu
18 zerstoerende Objekt noch abschliessende Arbeiten im Zusammenhang
19 mit seinem Ableben erledigen, wie z. B. die Anpassung des Gewichtes
20 seiner Umgebung etc. pp.
21
22 Der Interpreter zerstoert das Objekt nicht sofort, sondern er
23 markiert es als zerstoert, entfernt es von der Liste, die alle
24 Objekte enthaelt, und fuegt es zu der Liste zu zerstoerenden
25 Objekte hinzu. Die tatsaechliche Zerstoerung geschieht erst dann,
26 wenn keine Referenzen mehr auf das Objekt existieren. Deshalb ist
27 es moeglich, dass ein Objekt noch lange nach seiner Zerstoerung
28 Speicher belegt, obwohl es von ausserhalb nicht mehr gefunden wird.
29
30BEISPIEL
31 ob->remove();
32 if(ob) // es existiert noch, vielleicht ist die Lfun
33 // remove() nicht definiert?
34 destruct(ob);
35
36 Dies ist die Standard-Methode, ein Objekt zu zerstoeren, ihm aber
37 vorher noch die Chance zu geben, es selber zu tun.
38
39AENDERUNGEN
40 LDMud 3.2.7: 0 (zerstoerte Objekt) als Argument annehmen.
41
42SIEHE AUCH
43 clone_object(E), remove(A)