Zarządzanie pamięcią
Ostatnio zmodyfikowano 2017-10-26 20:29
Anim Temat założony przez niniejszego użytkownika |
Zarządzanie pamięcią » 2017-10-26 14:57:43 W nawiązaniu do tematu wcześniejszego, który został zamknięty :) http://cpp0x.pl/forum/temat/?id=26092. Mam dwa pytania. A szczerze mówiąc to pytanie i prośbę... Pytanie... Jeśli, tak jak w tamtym temacie obiekty zostały powołane w następujący sposób: Pochodna * a = new Pochodna( int ); Pochodna * b = new Pochodna( int ); Pochodna * c = new Pochodna( int );
Abstrakcyjny * A[] = { a, b, c };
To jak to zwolnić przy użyciu delete? Zrobiłem tak: delete a; delete b; delete c;
natomiast jak zwolnić na końcu sam obiekt *A[] ? Natomiast prośba jest następująca. Za sugestią @michal11 zacząłem czytać o shared_ptr oraz unique_ptr, ale nie do końca rozumiem zastosowanie tejże metody wskaźnikowej. I w związku z tym chciałbym spytać, czy ktoś mógłby mi powyższy przykład rozpisać na inteligentnych wskaźnikach? Byłbym wdzięczny. //EDIT Zrobiłem tak: std::shared_ptr < Pochodna > a( new Pochodna( int ) ); std::shared_ptr < Pochodna > b( new Pochodna( int ) ); std::shared_ptr < Pochodna > c( new Pochodna( int ) );
std::shared_ptr < Abstrakcyjny > A[] = { a, b, c };
I działa... To wszystko? To jest ta magia, co nie wymaga pamiętania o zwalnianiu pamięci ^^ Ps: Nadal nie wiem jak zwalniać powyższe poprzez użycie delete :) |
|
Monika90 |
» 2017-10-26 15:54:25 natomiast jak zwolnić na końcu sam obiekt *A[] ?
|
Obiektu A nie musisz zwalniać, bo nie został utworzony za pomocą new. A to drugie to lepiej tak std::unique_ptr < Abstrakcyjny > A[] = { std::make_unique < Pochodna >( 11 ), std::make_unique < Pochodna >( 12 ), std::make_unique < Pochodna >( 13 ) };
lub auto a = std::make_unique < Pochodna >( 11 ); auto b = std::make_unique < Pochodna >( 12 ); auto c = std::make_unique < Pochodna >( 13 );
std::unique_ptr < Abstrakcyjny > A[] = { std::move( a ), std::move( b ), std::move( c ) };
nie używaj shared_ptr bez powodu. A twoja klasa Abstrakcyjny musi mieć wirtualny destruktor. |
|
Anim Temat założony przez niniejszego użytkownika |
» 2017-10-26 20:29:04 Dziękuję Moniko :) |
|
« 1 » |