Operator zum dereferenzieren von Zeigern (und new) überschreiben



  • ist es möglich diese Operatoren zu überschreiben? Das wären doch "nur" *, -> und []. 😕

    Wie müsste ich herangehen wenn ich z.B. den new Operator überschreiben möchte. Reicht da eine globale Funktion á:

    UINT new(...)
    


  • Die new-Verarbeitung kannst du nur indirekt beeinflussen (indem du steuerst, wie der Speicher angefordert werden soll):

    void* operator new(size_t sz)
    {
      void* ptr;
      //reserviere Platz für mind. sz Bytes
      return ptr;
    }
    

    (new reserviert über diese Funktion den Speicherplatz und ruft anschließend den Objekt-Konstruktor auf)

    operator *, -> und [] kannst du ganz normal als Elemente deiner Klasse überladen, * und [] sollte eine Referenz (oder pseudo-Referenz) zurückgeben, -> einen blanken Pointer (oder eine Klasse, die wiederum op-> überlädt).

    PS: operator new wird entweder global überladen (dann gilt er für ALLE new-Aufrufe) oder als statischer Member der Objektklasse (dann gilt er nur für diese Klasse und ihre Nachkommen).



  • CStoll schrieb:

    operator *, -> und [] kannst du ganz normal als Elemente deiner Klasse überladen, * und [] sollte eine Referenz (oder pseudo-Referenz) zurückgeben, -> einen blanken Pointer (oder eine Klasse, die wiederum op-> überlädt).

    Diese Operatoren kann ich aber auch global überladen oder? Ich will nämlich mitloggen wann und wo Zeiger angelegt, dereferenziert und gelöscht werden.



  • Nein, die müssen afaik als Member deiner Zeigerklasse definiert werden.

    (Operatoren NUR für eingebaute Typen kannst du sowieso nicht überladen - und Pointer sind eingebaute Typen)


Anmelden zum Antworten