Rozwiązanie problemu- obiekty

0

Dzień dobry. Potrzebowałbym od Was odpowiedzi na 1 z 2 pytań- gdyż odp. na chociaż 1 pytanie rozwiąże mój problem.

  1. Jak usunąć tak stworzony obiekt: Klasa obiekt;
  2. Gdy tworzę obiekt w ten sposób: Klasa * obiekt = new Klasa; to jak dobrać się do zmiennych tego obiektu?

Po prostu obiektu 1) nie umiem usunąć, zaś obiektu 2) nie potrafię użyć :)
dzięki z góry za pomoc!

2
  1. Krótko mówiąc: w runtime się nie da. Obiekty z automatic storage duration<troche_kłamstwo>alokowane na stosie</troche_kłamstwo> przy wejściu do ich scopa, przy wyjściu są zwalniane. Kropka. Wywołanie delete na takim obiekcie to UB.
  2. obiekt->zmienna
3
  1. } (tak jak pingwin napisał)
  2. ->. Przy okazji, używanie nagiego new (a szczególnie delete) to antyidiom w C++. Użyj przynajmniej unique_ptr i make_unique
0

Dzięki. Czyli tworzenie: Klasa obiekt; jest mniej praktyczne, dobrze rozumiem?

0

Dlaczego niby?

4

Bardzo źle rozumiesz. Polecam ten wykład jeśli masz czas. W przeciwnym razie, na szybko: zawsze preferuj obiekty o automatycznym czasie życia. Tylko jeśli one wyraźnie nie mają sensu, wtedy zajmuj się tymi z dynamicznym czasem życia.

Dla przykładu, które jest praktyczniejsze:

string s = "foo";
cout << s << endl;
auto s = make_unique<string>("foo");
cout << *s << endl;
string* s = new string("foo");
cout << *s << endl; // hehe jak poleci wyjątek to mamy wyciek pamięci bo piszemy antyidiomatyczny kod
delete s;
0

Jeśli wiem że obiekt będę usuwać (oszczędność RAM), to wtedy tworzyć dynamiczne. Przeciwnie mam brać te automatyczne. Dopiero się uczę C++ i programowania tak na poważniej.

2

A myślisz, że co się dzieje z obiektem o automatycznym czasie życia po } jego zakresu? Odsyłam do punktu 1) w mojej pierwszej odpowiedzi.

1

No jak scope się kończy to SP - stack pointer jest przesuwany i "RAM sie zwalnia".

0

W porządku, chyba już wszystko zrozumiałem. Dzięki za szybką pomoc w nadrabianiu wiedzy :)

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