C++-ban való gondolkodást olvasok, 13. fejezet: dinamikus objektumkészítés. Ebben a fejezetben Eckel a void* törléséről beszélt valószínűleg egy hiba. A következő bekezdés összezavar.
A másik memóriaszivárgási probléma azzal kapcsolatos, hogy megbizonyosodjon arról, hogy a tárolóban lévő minden egyes objektummutató esetében a törlés valóban megtörténik. A tároló nem tudja „tulajdonolni” a mutatót, mert üres helyen tartja*, és így nem tudja végrehajtani a megfelelő tisztítást. A tárgyak eltakarításáért a felhasználónak kell felelnie. Ez komoly problémát okoz, ha mutatókat ad hozzá a veremben létrehozott objektumokhoz és a kupacban létrehozott objektumokhoz ugyanahhoz a tárolóhoz, mert a törlési kifejezés nem biztonságos egy olyan mutató esetében, amely nincs lefoglalva a kupacban.
Valaki el tudná magyarázni részletesebben, hogy miért jelent komoly problémát "mutatók hozzáadása a veremben létrehozott objektumokhoz és a kupacban létrehozott objektumokhoz ugyanahhoz a tárolóhoz"?
A probléma egyértelműbbé tétele érdekében hozzáadom a kapcsolódó kódrészletet.
class Stack {
struct Link {
void* data;
Link* next;
void initialize(void* dat, Link* nxt);
}* head;
public:
void initialize();
void push(void* dat);
void* peek();
void* pop();
void cleanup();
};