Предположим, что есть вектор Item
sЧто произойдет, если элемент std :: vector «совершит самоубийство» (используя delete this;)?
vector<Item*> items; //{item1, item2, item3}
Затем в другой части кода,
items[1]->suicide();
где функция suicide
является:
void Item::suicide()
{
delete this;
}
Что items
вектор размера и как это сейчас? Это ОК для этого?
Edit (могу я задать дополнительный вопрос?): Если желаемое расположение выходе {item1, item3}
, размер 2
, и нет оборванного указателя, как это делается в самоуничтожающемся способе (с item2
сам)?
Редактировать 2: Спасибо за все ответы! Потрясающие. Поэтому я, наконец, решил и нашел способ сделать это из-за пределов объекта, потому что это была плохая практика и излишне сложная
См. Связанные вопросы с тегом [самоуничтожение]: http://stackoverflow.com/questions/tagged/self-destruction%20c%2b%2b?sort=votes&pagesize=50 –
приятный, не знал о что тег – stijn
Лучшее, что вы можете сделать, это переосмыслить вашу проблему. Вам действительно нужны суицидальные объекты? Можете ли вы реорганизовать его так, чтобы объект указывал вызывающему, нужно ли его уничтожать, а затем вызывающий удаляет/удаляет из вектора? –