Pouzity pristup ma pomerne dost velke nevyhody:
a) neni transparentni pro zdrojovy kod, prinejmensim, co se onoho pamatovani FILE, LINE tyce
b) neni transparentni pro linker, tzn. nutnost rekompilace, o 3rd party kodu ani nemluve
c) poznamka k efektivite - linearni seznam nepatri zrovna mezi nejrychlejsi datove struktury
Reseni:
a) pouzit napr. backtrace(3, linux specific), ostatne prvni frame nad alokaci toho obvykle stejne moc nerekne
b) pouzit napr. LD_PRELOAD, v horsim pripade aspon pridat knihovnu pri linkovani
c) lepsi struktura ;)
Celkove mi prijde ten clanek jako hezky nastin problemu, nicmene je asi vhodnejsi poohlednout se po jiz hotove veci ala zminovany efence, jehoz memory-leak detection je prece jen dotazenejsi a v mnoha smerech zpusobe implementace agresivnejsi.
Z těch nedotažených věcí tu chybí třeba detekce dvojnásobného delete a podobných problémů: pokud se v MemoryPositionList::Remove příslušný blok nenajde, prostě se to odignoruje. To určitě není dobře.
?? Mam uplne jine zkusenosti z praxe. Vetsinou to nadela docela slusnou paseku, hlavne takovym tim "tichym stylem", ze se to zacne projevovat az pozdeji.
IMHO jedine co operator delete ignoruje je volani s NULL-em, takze kdyz clovek NULLuje pointer na pamet po delete, tak i v pripade dvojiteho delete se stejnym zdrojem hodnoty to uz fungovat bude, ale pokud tohle neni planovane chovani diky "robustnosti" kodu, tak je to stejne spatne a programator by si na to mel davat pozor.
To je samozřejmě nesmysl. A jak myslíte, že třeba dopadne delete (int*)(rand());
? Jak už bylo uvedeno, jediné, co je definováno, je, že delete 0 nedělá nic.
ISO/IEC 14882, 5.3.5:
Note: the value of a pointer that refers to deallocated storage is indeterminate.