Witam,
mam problem z wyciekiem pamięci przy użyciu pewnych operatorów. Wywołuję w pętli pociag++, a następnie pociag--, ale po ostatniej operacji pamięć używana przez program nie zmniejsza się. Nie mogę zlokalizować mojego błędu. Oba operatory definiowałem na różne sposoby, ale za każdym razem pojawiał się ten sam problem. Dopiero zaczynam naukę C++, więc proszę o wyrozumiałość, zdaję sobie sprawę, że problem może być trywialny. Z góry dziękuję za pomoc :)
(wszystkie fragmenty kodu ograniczyłem tylko do tych istotnych dla problemu)
Definicja klas:
class Pociag{
private:
Wagon* wagony;
int liczba_wagonow;
}
Destruktory i używany w poniższych operatorach operator =:
Pociag::~Pociag()
{
if (wagony!=NULL)
delete[]wagony;
}
Pociag & Pociag::operator = (const Pociag &pociag)
{
liczba_wagonow = pociag.liczba_wagonow;
if (liczba_wagonow > 0)
{ delete[]wagony;
wagony = new Wagon[liczba_wagonow];
for (int i = 0; i < liczba_wagonow; i++)
wagony[i] = pociag.wagony[i];
}
else {
wagony=NULL;
}
return *this;
}
Oraz dwa sprawiające problem operatory:
Pociag Pociag::operator ++ (int)
{
Pociag tymczasowy=*this;
liczba_wagonow++;
delete[]wagony;
wagony = new Wagon[liczba_wagonow];
for (int i = 0; i < liczba_wagonow-1; i++)
wagony[i] = tymczasowy.wagony[i];
return tymczasowy;
}
Pociag Pociag::operator -- (int)
{
if (liczba_wagonow > 0)
{
Pociag tymczasowy=*this;
liczba_wagonow--;
delete[]wagony;
wagony = new Wagon[liczba_wagonow];
for (int i = 0; i < liczba_wagonow; i++)
wagony[i] = tymczasowy.wagony[i];
return tymczasowy;
}
else {
cout << "Pociag nie ma wagonow!" << endl;
return *this;
}
}