Jak odwołać się obiektu jednej klasy w innej klasie tak aby miał zasięg globalny?

0

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.

1

Jeżeli używasz new to obiekt jest tworzony na stercie i po wyjściu z funkcji nadal istnieje a Ty masz do niego wskaźnik. Jeżeli pomiędzy wywołaniami metoda1 oraz metoda2 go nie usuwasz to powinno działać. Debuguj.

1

w metoda1 ma być wsknaklase = new klasa1(6); - masz przypisać do pola klasy, a nie zmiennej lokalnej, która po wyjściu z metody przestaje istnieć

0

byku_guzio ma rację, nie zauważyłem, że skoro zadeklarowałem wskaźnik w nagłówku to tylko później przypisuje mu wartość. Już wszystko działa. Dziękuję.

Do zamknięcia

1 użytkowników online, w tym zalogowanych: 0, gości: 1