Czyli niezależnie jaki wskaźnik rejestruje pamięć, tak długo jak mam adress tej pamięci gdziekolwiek
i użyję właściwego delete na właściwym adresie to wskaźniki mogą się dowolnie wymieniać adresami.
Pozwolę sobie jeszcze zadać pytanie, skąd delete[]; wie jak dużo zwolnić pamięci?
Jest jakaś opcja aby znaleźć pamięć jak napisał DejaVu, która "zgubi" się?
@Pekfos, czytałem o tym artykuł i dlatego zawsze jak używam wskaźników to pierwszą rzeczą którą
robię jest zawsze utworzenie delete dla takiego wskaźnika.
Na końcu funkcji albo w destruktorze, albo czasem od razu piszę void FreeMemory(); ( jeśli ma "żyć" inną długość czasu )
Jedna z funkcji z programu "Notatnik od zaplecza" o który już kilka razy pytałem,
Naczytałem się wystarczająco że nawet posiadam zmienną ( bool ) Exist aby upewnić się że pamięć istnieje.
Bo jak czytałem kiedyś artykuł wywołanie delete[] na wskaźniku który na nic nie wskazuje jest również złe
( chociaż w tym artykule nie powiedzieli dlaczego? )
void qDelete() {
if( !Exist ) {
return; }
Exist = false;
Length = 0;
delete[ ] Char;
return;
}
Funkcja upewnia się że pamięć istnieje, ustawia Exist na false ( aby nie wywołać funkcji ponownie )
Ustawia Length na 0 ( aby żadne processy nie starały się odczytać wartości w tablicy )
I na końcu finalnie kasuje pamięć, upewniając się wcześniej że wszystko powinno być ok :)
//Edit: poprawka literówki.