Löschen von Objekt erzwingen

Status
Nicht offen für weitere Antworten.

Streen

Mitglied
Hallo,

Und zwar habe ich folgendes Problem, ich möchte ein Objekt in meinem Projekt löschen.
Klar mit obj = null, lösche ich den Pointer auf dieses Objekt, und wenn es der letzte Pointer war sammelt der Garbage Collector das Ding ein und löscht es.

Das Problem ist, dass ich relativ viele Pointer an unterschiedlichen Stellen im Programm habe die alle auf das Objekt zeigen. Wie kann ich es anstellen, dass ich sagen kann delete(obj) und alle Pointer drauf werden automatisch null gesetzt, sprich das Ding wird gelöscht?

Grüsse, Streen
 
hoho, nein sowas geht in einer geordneten Programmierwelt nicht,

eine Spielerei in der Richtung:
alle unterschiedlichen Stellen im Programm haben keine Referenz auf das Objekt direkt sondern auf ein spezielles Objekt der Klasse MyReference,

dann hat nur dieses eine MyReference eine Referenz, diese kannst du leicht(er) auf null setzen,
alle Stellen im Programm behalten weiter ihre Referenz auf das eine MyReference-Objekt und müssen halt immer damit rechnen,
dass dieses auf null weiterleitet
 
Hmm, okay...

Das Problem war, das ich am Anfang bei meiner Planung leider nicht dran gedacht hatte dass ich das Objekt mit dem ganzen Rattenschwanz der dran hängt wieder löschen muss, da es ein Konsolenprogramm war, das einfach nur druchlief. Jetzt hab ich ne GUI für implementiert.

Da mit den Null Pointern währe nicht so schlimm (hab dafür schließlcih die Exceptions drin ^^)

Hmm mal schaun ob sich das mit dem Referenz-objekt lösen lässt...

*Grübel*


Danke,
Streen

Edit: Ne andere Idee, gibt es eine Möglichkeit nachzusehen wieviele Referenzen noch auf einem Objekt zeigen?
Edit2: Und gibt es eine Möglichkeit den Garbage Collector dazu zu zwingen, dass er gleich aufräumt? Sprich was in der Art GB.freeNow() ?
 
Hallo,

hast du das was du suchst nicht schon längst gegeben?
Du legst das Objekt genau 1mal mit
myObj = new Objekt()
an. Die rechte Hälfte der Gleichung legt in einem Speicherbereich die Instanz physikalisch an. Die linke Hälfte der Gleichung nennt eine 2Byte-Adresse mit der Adresse der Instanz. An Methoden und Klassen übergibst du diese Adresse. Und wenn du an einer Stelle den Inhalt der Adresse auf Null gesetzt hast und an einer anderen Stelle zugreifst, dann findest du NULL vor. -- Das ist ein häufiger Grund für die Null-Pointer-Exception.
Was du natürlich nicht machen darfst ist es den Wert der Adresse erst einmal zwischenzuspeichern.
Pointer puffer = myObj
wird nicht zusammen mit myObj verändert. Sondern erst dann, wenn puffer neu überschrieben wird.
 
> Was du natürlich nicht machen darfst ist es den Wert der Adresse erst einmal zwischenzuspeichern.

eine einzelne Referenz auf null setzen ist keine Kunst,
im ersten Posting ist doch sehr deutlich gegeben, dass es um mehrere Referenzen geht:

> Das Problem ist, dass ich relativ viele Pointer an unterschiedlichen Stellen im Programm habe
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben