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)