| 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. |
| |
| BEISPIEL |
| 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. |
| |
| AENDERUNGEN |
| LDMud 3.2.7: 0 (zerstoerte Objekt) als Argument annehmen. |
| |
| SIEHE AUCH |
| clone_object(E), remove(A) |