2013-02-22 3 views
3

Я просто хочу убедиться, что это правильный способ удалить выделенную память, где есть элемент в векторе, указывающий на этот объект;Удаление элемента в векторе указателя

vector<Fruit*> temp; 

позвольте сказать, если шестой элемент в векторе указывает на объект, который я хочу удалить.

Fruit* a = temp[5]; 
temp.erase(temp.begin()+5); 
delete a; 

Это право? ТНХ

+8

Конечно. Или даже просто «удалить temp [5]; temp.erase (temp.begin() + 5); '. –

+0

okay thx. Я просто хочу убедиться, что я поступаю правильно: D_ –

ответ

2

внушения Kerrek является, конечно же, OK:

delete temp[5]; 
temp.erase(temp.begin() + 5); 

Я пишу ответ, однако, предложить вам думать о смарт-указатели. Вот пример:

std::vector<std::shared_ptr<Fruit>> v; 

// add some elements 

v.erase(temp.begin() + 5); 

В этом случае нет никакой утечки памяти, потому что shared_ptr разрушения удаляет объект, принадлежащий ему, или уменьшает количество ссылок должным образом. Если нет совместного использования, вы можете просто использовать unique_ptr. boost::ptr_vector может также пригодиться.

+5

'unique_ptr' здесь больше смысла, чем' shared_ptr', так как нет необходимости в совместном владении. –

Смежные вопросы