probleme bei templates
-
hi,
also als erstes möchte ich mein problem mit den templates beschreiben. ich habe "früher" immer makros zum freigeben von pointern auf den heap verwendet. ich zeige einfach mal ein beispiel.
#define DEL(x) { if(x) { delete x; x = 0; } }dieses makro funktioniert so wie ich es erwartet hatte, doch hatte ich später die idee dieses makro durch eine templatefunktion zu ersetzen(wegen typensicherheit). auch hier zeige ich einfach mal den quelltext.
template<typename ARG_TYPE> void DEL(ARG_TYPE* pHeap) { if(pHeap) { delete pHeap; pHeap = 0; } return; }doch diese funktion funktionierte nicht ganz wie erwartet. die adresse auf der der zeiger verweist ist nicht null sondern eine negative speicheradresse. ich bin wirklich verzweifelt und habe keine ahnung weshalb das so ist. kann mir jemand helfen?
mfg
DEADBEEF
-
Du mußt schon eine Referenz auf deinen Pointer übergeben, sonst wird nur die lokale Pointerkopie auf 0 gesetzt.
template<typename ARG_TYPE> void DEL(ARG_TYPE*& pHeap) { delete pHeap; pHeap = 0; }Den Test auf 0 vor dem delete kannst du dir sparen, da das vom delete schon selbst geprüft wird. Das return ist auch unnötig.
Wenn du Smartpointer verwendest, bzw. ganz auf rohe Pointer verzichtest, kannst du dir auch diese ganze Funktion sparen
-
template<typename ARG_TYPE> void DEL(ARG_TYPE*& pHeap) { delete pHeap; pHeap = 0; }
-
danke für eure antworten, funktioniert jetzt endlich. hätte eigendlich selber drauf kommen müssen...