Tworzenie obiektów operatorem new

1

Cześć, ostatnio dosyć sporo analizowałem kod innych osób w tym m.in. korzystający z qt i zauważyłem, że ludzie bardzo często tworzą obiekty operatorem new tzn. np. tak:

Klasa* klasa = new Klasa;
//ew.
Klasa* klasa = new Klasa(...);

Mam pytanie czy jest jakiś ukryty cel tworzenia obiektów operatorem new? Po co tworzyć wskaźnik a obiekty tworzyć dynamicznie a nie po prostu w ten sposób:

Klasa klasa;
//ew.
Klasa klasa(...);

Po co tworzyć wskaźnik na obiekt jeśli później tworzymy obiekt tego samego typu co owy wskaźnik (a nie jakiś obiekt, który dziedziczy po tym obiekcie i korzysta z funkcji virtual)?

Z góry dzięki za rozjaśnienie sprawy ;-)

0
  1. Obiekty tworzone przez new są alokowane na stercie. Sterta jest dużo większa niż stos. Stertę ogranicza twój dostępny ram.
  2. Zasięg obiektów. Zauważ ze utworzenie obiektu przez new powoduje że jest on utworzony i żyje aż do delete. Obiekt utworzony na stosie tak jak to pokazałeś ma ograniczony zasięg -> blok w którym go deklarujesz.
0

W sumie to po nic. Wybiera sie sposob tworzenia obiektu nastepujaco:
#Na stosie.
#RAII.
#Raw pointer.

Przy czym ostatnie robi sie w ekstremalnych przypadkach aktualnie (no i dosc czesto spotykane w starym kodzie).

0

Prosta i banalna odpowiedź - przez "new" tworzy się obiekty wtedy, gdy nie wiemy przed uruchomieniem programu ile ich będziemy potrzebować. Ew. jak napisano wyżej - gdy jest ich bardzo dużo. Stos ma ograniczoną pojemność.

0

Dzięki wszystkim za odpowiedzi ;-). Rzeczywiście to może mieć związek z ograniczoną pojemnością pamięci na stosie ;P. W końcu takie okienko wymaga sporej ilości informacji ;).
@vpiotr czy mógłbyś coś więcej napisać na temat tego zestawienia, które stworzyłeś? Co to znaczy, że "Java to ekstremum"?

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