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)
