Najprostszy kod na jaki wpadłem ilustrujący problem:
#include <iostream>
using namespace std;
class Klasa
{
public:
int *jakisWskaznik;
Klasa()
{
jakisWskaznik = new int;
*jakisWskaznik = 50;
}
~Klasa()
{
delete jakisWskaznik;
}
int get()
{
return *jakisWskaznik;
}
};
void funkcjaZPomylka(Klasa klasa)
{
cout << klasa.get() << endl;
}
int main()
{
Klasa test;
funkcjaZPomylka(test);
funkcjaZPomylka(test);
return 0;
}
problem polega na tym że po pierwszym wywołaniu "funkcjaZPomylka" tworzona jest kopia obiektu Klasa, ale nie kopiują się zmienne spod wskaźników wskutek czego za pierwszym razem wyświetla się poprawnie wartość "50", ale wraz z wyjściem z funkcji wywołuje się destruktor który niszczy zmienną i przy drugim wywołaniu mamy już jakieś śmieci
oczywiście jeśli klasę przesłać przez referencję to wszystko jest w porządku, ale gdzieś w programie przecież mogę się pomylić, zapomnieć o tym jednym znaczku i błąd będzie raczej ciężki do znalezienia
co przeoczyłem?