On Monday 14 May 2007 19:51:15 Eric-Alexander Schaefer wrote:
Semantisch korrekt aber es drückt nicht aus was Du meinst.
Einen Fall kann man bei Pointern in C und C++ aber nicht trivial abfangen:
[...baumelnde Zeiger...]
Es gibt ein paar Workarounds: * Der Pointer selbst wird zu einem Objekt gemacht. Unter Qt gibt es beispielsweise die Klasse QGuardedPtr, deren Instanzen beim Löschen auf 0 gesetzt werden. * Die (De-)Allokierung wird speziell gehandhabt. Also etwa so:
template <class T> T* newclass() { T *ret = new T; // ret registrieren return ret; }
Wenn man das nun als "operator new" irgendwo einsetzt, hat man eine Übersicht über alle Objekte (std::map reicht aus) und kann ASSOCIATED damit implementieren. Unter C ist das durchaus etwas üblicher (malloc-Wrapper mit Debug-Informationen zu fehlerhaften free()-Aufrufen), aber unter C++ ist es auch möglich. * Boost hat bestimmt auch noch was :-)
Aber es sind halt alles nur Workarounds, der direkte Speicherzugriff verlangt seinen Tribut.
Josef