Wskaznik a referencja

0

Witam! Nie wiem czy dobrze myślę, bo ostatnio mnie coś natkneło, żeby wyprobować coś takiego:

 class X{
public:
	int a;
}

void zmien(X * x)
{
	x = new X();
	x.a = 5;
}

void zmien(X & x)
{
	x = X();
	x.a = 5;
}

void main()
{
	X * o = new X();
	X v;

	o->a = 10;
	zmien(o);
	cout<<o->a;

	v.a = 10;
	zmien(v);
	cout<<endl<<v.a);
}
 

Dlaczego jeżeli przekazuje parametr przez wskaznik, a nastepnie tworze dla tej zmiennej nowy obiekt, to tracę referencje? Jest tak dlatego, że przekazując przez wskaznik przekazuje tlko adres, a po utworzeniu nowego obiektu przez new obiekt jest tworzony na innym adresie? cout<<o->a; wypisuje 10, a myslałem, ze bedzie jak dla referencji, gdzie dla v.a wypisuje 5... Może ktoś to jakoś fajnie wytlumaczyć ?

3

Wewnątrz funkcji pracujesz na kopii tego przekazanego wskaźnika, więc poza nią (czyli w main) ten wskaźnik nadal wskazuje na stary obiekt.
Przekazywanie parametru przez wartość i referencję

Swoją drogą w tej funkcji ze wskaźnikiem masz wyciek pamięci, bo nie usunąłeś tego co zaalokowałeś w funkcji.

0

dziękuję za odpowiedź, przydała się....odnośnik również. Źle to rozumiałem... myslałem, że przekazywanie przez wskaznik to przekazuje oryginał.

0

Przekazujesz wskazanie na oryginał, ale próbujesz zmienić to wskazanie.

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