R. 46 - czy w tym kodzie dochodzi do wycieku pamięci?
Ostatnio zmodyfikowano 2019-09-30 14:42
rottingham Temat założony przez niniejszego użytkownika |
R. 46 - czy w tym kodzie dochodzi do wycieku pamięci? » 2019-09-26 21:55:39 Mam pytanie. Nie jestem pewien czy dobrze zrozumiałem ten temat. Stąd moje pytanie: czy ten kod jest sensowny i czy tutaj dochodzi do wycieku pamięci? #include <iostream> #include <memory>
using namespace std;
struct Wezel { int liczba; shared_ptr < Wezel > nastepny; };
struct Lista { shared_ptr < Wezel > glowa, ogon; };
void dodajKoniec( int liczba, Lista & lista ) { shared_ptr < Wezel > nowy( new Wezel ); nowy->liczba = liczba; nowy->nastepny = nullptr; if( lista.glowa ) { lista.ogon = lista.ogon->nastepny = nowy; } else { lista.ogon = lista.glowa = nowy; } }
void wypisz( Lista lista ) { while( lista.glowa ) { cout << lista.glowa->liczba << " "; lista.glowa = lista.glowa->nastepny; } }
int main() { int liczba; { Lista lista; while( cin >> liczba, liczba ) dodajKoniec( liczba, lista ); wypisz( lista ); } }
|
|
pekfos |
» 2019-09-26 22:02:48 Kod jest dobry i nic nie cieknie. Chyba trzeba dopisać do lekcji, jak można doprowadzić do wycieku pamięci z std::shared_ptr<>, żeby wiedzieć czego nie robić. Hmm.. |
|
rottingham Temat założony przez niniejszego użytkownika |
» 2019-09-26 22:14:30 Ok, bardzo dziękuję za odpowiedź.
Pozdrawiam!
EDIT. W sumie to przedwcześnie zamknąłem. Mam jeszcze pytanie: jak mogę sprawdzić, że te wskaźniki zwalniają pamięć? |
|
pekfos |
» 2019-09-27 17:36:22 Możesz użyć std::weak_ptr<>, tak jak jest zademonstrowane na przykładzie w kursie. Chyba, że chcesz mieć dowód, że naprawdę pamięć jest zwalniana, a nie tylko że te smart pointery tak mówią, do tego możesz użyć jakiegoś typu, który ma widoczne efekty uboczne podczas jego niszczenia - na przykład klasa z ostatniego przykładu w Konstruktory i destruktory. Technicznie rzecz biorąc to wciąż pokazuje tylko, czy obiekt jest niszczony, a nie czy zwalniana jest pamięć na której się znajdował. Sprawdzanie faktycznego zwalniania pamięci to już by była paranoja w tym wypadku ;) |
|
rottingham Temat założony przez niniejszego użytkownika |
» 2019-09-30 14:42:23 Rozumiem. Dzięki wielkie za pomoc.
Pozdrawiam! |
|
« 1 » |