Да, для каждого new
должен быть соответствующий delete
. (И delete[]
для каждого new[]
.)
Тем не менее, путь C ++ будет избегать динамического хранения в максимально возможной степени и скорее использовать локальные автоматические переменные :
for(int i = 0; i < 10; ++i)
{
some_class object;
//use object
} // object gets destroyed here automatically
Если вам нужно выделить этот объект динамически (что я сомневаюсь, но есть такие случаи), тогда использует умный указатель . Интеллектуальный указатель выполнит для вас delete
, независимо от того, как вы покидаете область, к которой он относится:
for(int i = 0; i < 10; ++i)
{
smart_ptr<some_class> object(new some_class());
//use object
} // object gets destroyed here automatically
Текущий стандарт знает только один умный указатель с именем std::auto_ptr
, который будет делать то, что вам нужно в этом случае. В следующем стандарте появятся еще несколько, среди которых замена на std::auto_ptr
с именем std::unique_ptr
и на семантическую семантическую собственность std::shared_ptr
. Ваш компилятор / std lib может фактически уже поддерживать их. Если нет, вы можете найти их среди множества замечательных библиотек, которые можно найти по адресу boost .
Кстати, обратите внимание, что я заменил ваш i++
на ++i
. В случае int
это не имеет никакого значения в вашем сценарии, но есть типы, для которых i++
может создать ненужную копию. (Если эффективность вас не касается, зачем программировать на C ++?)