Witam,
Stawiam swoje pierwsze kroki w programowaniu obiektowym i zaczynam tworzyć swój pierwszy program w C++, może to pytanie wydawać się głupie, ale niestety nie wiem na razie jak to ugryźć.
// nagłowek klasy1
class klasa1
{
private :
friend class klasa2
int nZmienna;
public :
klasa1(int a) : nZmienna(a) //konstruktor klasy1
{
}
// metody klasy1
// destruktor
};
//naglowek klasy2
class klasa2
{
private :
Klasa1 *wsknaklase; //deklaracja wskaznika na obiekt klasy 1
public :
//konstruktor klasy2
// metody klasy2
~klasa2 // destruktor
{
delete wsknaklase; // usuwam obiekt na ktory wskazuje wskaznik
}
};
// plik klasa2.cpp
#include "klasa1.h"
//implementacja metod
void klasa2::metoda1()
{
klasa1 *wsknaklase = new klasa1(6); // tworze obiekt klasy podajac wartosc
// instrukcje
}
void klasa2::metoda2()
{
wsknaklase->metodaKlasy1 // i tutaj niestety pojawia sie blad (Unhandled exception at 0x00411aeb in klasy.exe: 0xC0000005: Access violation reading location 0xccccccd0.)
}
Czytajac teorię dowiedziałem się, że obiekt tworzony jest tylko w obrębie funkcji, a potem jest usuwany (rzeczywiście tak jest jak dodałem metodę klasy 1 w klasa2::metoda1, to wszystko działało). Jednak czy można w jakiś sposób temu zaradzić? Przecież potem muszę taki obiekt ręcznie usunąć by zapobiec wyciekowi pamięci, co robię poprzez destruktor w deklaracji klasy.