Wektor wskaźników do obiektów

0
struct MyStruct {};

Czy jak napiszę:

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?

2
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/

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:

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.

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.

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

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