Wektor wskaźników do obiektów

Wektor wskaźników do obiektów
didzni
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 136
0
Kopiuj
struct MyStruct {};

Czy jak napiszę:

Kopiuj
vector<MyStruct*> vec;
for (int i = 0; i < 10; i++) vec.push_back(new MyStruct());

for (int i = 0; i < 10; i++) delete vec[i];

to nie będzie wycieku pamięci? To jest w ogóle eleganckie rozwiązanie, czy nie za bardzo?

MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
2
Kopiuj
std::vector<std::unique_ptr<MyStruct>> vec;

Polecam artykuł kolegi z forum: https://dsp.krzaq.cc/post/176/ucze-sie-cxx-kiedy-uzywac-new-i-delete/

Sunnydev
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Nether
  • Postów: 235
0

jakbyś nie zwolnił pamięci przy użyciu delete, to byłby wyciek.
używanie new/delete nie jest eleganckie :D. Używaj smart pointerów:

Kopiuj
std::vector<std::unique_ptr<MyStruct>> vec;
	for(int i = 0; i < 10; i++) 
		vec.push_back(std::make_unique<MyStruct>());

przy okazji nie martwisz się o zwalnianie zasobów.

several
  • Rejestracja: dni
  • Ostatnio: dni
0

to nie będzie wycieku pamięci?

Nie będzie.

To jest w ogóle eleganckie rozwiązanie, czy nie za bardzo?

Nie za bardzo.

Spearhead
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1007
0

Boost ma też wyspecjalizowane kontenery do trzymania wskaźników na obiekty, które same zwalniają pamięć kiedy trzeba https://theboostcpplibraries.com/boost.pointer_container

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.