Objekt hinter Pointer: Gültigkeit abfragen



  • Hi

    Kurze Frage: Wie kann ich abfraen, ob hinter einem Pointer ein gültiges Objekt steckt, ohne dass mein Programm abstürzt? (Das Objekt leitet sich von CObject ab)

    Danke
    Stefan



  • Zur Erklärung

    Mein Objekt speichert einen Pointer auf ein anderes Objekt. Wird dieses Referenzobjekt jedoch gelöscht, kann unter Umständen es passieren (z.B. bei Copy Paste Operationen und NeuLaden eines DataFiles zwischendurch) dass diese Pointer jetzt zwar noch einen Wert besitzen, jedoch "ins Leere" weisen. Dies muss ich abfangen.

    Stefan



  • Alle nicht zugewiesenen Pointer sind ja genullt, also

    if(ptr)
    

    mfg
    Glamdring



  • Einfach dem pointer NULL zuweisen:

    *ptrPerson = NULL;



  • Glamdrink hats besser erklärt, alle nicht benutzten pointer sollten NULL enthalten. damit kann man dann gut weiterarbeiten



  • Danke für die Antworten, aber das mit dem Null ist mir bekannt und deswegen frage ich eigentlich nicht.
    Klar könnte ich bei jedem Neuladen eines neuen Files alle Buffered Objekte (die mir als Copy/Paste Container dienen) durchgehen und die Referenzpointer auf Null setzen. Es muss aber sicherheitshalber auch beim absetzen des Paste Befehls überprüft werden ob der Pointer noch gültig ist.

    Z.B.: Ich markiere ein Objekt und kopiere es. Referenzobjekt wird als Pointer (Membervariable) mit kopiert.
    Das Referenzobjekt wird gelöscht.
    Ich setzte Paste ab. Der Code merkt dass das Referenzobjekt nicht mehr existiert und setzt den Pointer auf Null.

    Mit dem auf Null setzten müsste ich an einigen Stellen im Code Abfragen und Loops einbauen um den Referenzpointer auf Null zu setzten, mit der "Existenzabfrage" nur an einer.
    Gibts keine Exception die sowas abfangen kann?

    Stefan



  • In Standard C++ nicht.

    CObject gibt es da auch nicht.



  • Das wird wohl eine Klasse von ihm sein.
    Du musst es irgendwie (nochmal: du musst / solltest dringend) sicherstellen, dass gelöschte Objekte nicht mehr referenziert werden. Löscht du deine Objekte, wenn es dir gerade passt? Wenn du ein Objekt nicht mehr brauchst, dann setze doch einfach zuerst alle Zeiger auf NULL, die darauf zeigen.
    Vielleicht kannst du auch was mit dem Destruktor machen.
    Evtl. nochmal das Programmdesign überdenken ... viel Erfolg.



  • Auf 0 setzen ist eine Notlösung, mehr nicht. Notfalls würde ich einen autonull_ptr<> schreiben, der automatisch 0 wird, sobald das Objekt gelöscht wird.



  • ganz ehrlich habe ich sein Problem immer noch nicht verstanden. 😕

    Wenn ich ein Objekt mit delete lösche, dann mache ich es auch "= null". Was ist daran dreckig?



  • Es geht eben nur, solange man nur einen Zeiger auf das Objekt hat (und dann würde ich eh boost::scoped_ptr verwenden). Ob das hier der Fall ist, kann ich dem Posting irgendwie nicht entnehmen 🙂


Anmelden zum Antworten