Tworzenie klasy na 2 sposoby ?

0

Mam takie lamerskie pytanie. Jaka jest różnica między 2 dwoma deklaracjami tej samej klasy, tutaj przykład :

1)klasa *x = new klasa;// przypadek nr 1 , wskaźnik
2)klasa z; // przypadek nr 2
3)(dodatkowa:) klasa *y = &z; // poprawnie ? dozwolone ? :P

Czy różnica jest tylko w zapisie tzn :

        x->lama = true; // zapis przypadek nr 1
	cout << x->lama;

	z.lama = false; // zapis przypadek nr 2
	cout << z.lama;
        delete [] x; 

Kiedyś słyszałem że poprawne jest [klasa *x = new klasa] a nie [klasa z], czy to prawda ?

0

Oba są poprawne, w pierwszym przypadku zmienna jest tworzona na stercie, w drugim na stosie. Różnice są w zasięgu obowiązywania zmiennych. W drugim zmienna przestaje istnieć po wyjściu z bloku kodu, a w drugim po zwolnieniu pamięci operatorem delete.

W tym co napisałeś delete [] x; jest błędne, powinno być delete x; - ogólnie temat rzeka, musisz poczytać o zmiennych, wskaźnikach, dynamicznej alokacji pamięci

0
klasa *x = new klasa;// przypadek nr 1 , wskaźnik
klasa z; // przypadek nr 2
klasa &r=*(new klasa); // przypadek nr 3
klasa *y = &z; // poprawnie i dozwolone jak również: y=x; lub y=&r;
 
x->lama = true; // zapis przypadek nr 1
cout << x->lama;
 
z.lama = false; // zapis przypadek nr 2
cout << z.lama;

r.lama = true; // zapis przypadek nr 3
cout << r.lama;

delete x; // tu było źle. ponieważ new bez [] więc delete tez bez []
delete &r;
0

ok dzięki wielke :) musze jeszcze doczytać kilka rzeczy i może uda mi sie wykonać to co mam wykonać (masło maślane ... ;P)

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