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)
