Наверное такой вопрос задавали. но видимо я плохо искал
Так вот, будет ли утечка памяти в коде ниже?
Тестировал на VC 8.0 — утечек нет, а что в стандарте сказано по этому поводу? Чтение 5.3.4 мне не особо помогло
struct foo_t
{
foo_t(int p)
{}
};
int calc_foo_param()
{
throw "";
}
int _tmain(int argc, _TCHAR* argv[])
{
std::auto_ptr<foo_t>( new foo_t( calc_foo_param() ) );
return 0;
}
Здравствуйте, Igor_G, Вы писали:
I_G>Наверное такой вопрос задавали. но видимо я плохо искал
I_G>Так вот, будет ли утечка памяти в коде ниже?
не знаю что говорит стандарт, но утечки вроде нет, потому что до конструирования дело не доходит.
тут утекать еще нечему, т.к. исключение возникает до вызова new
P>да, действительно, оказывается так и происходит.
P>но в любом случае утечки не будет, т.к. выделенная память освободится механизмом обработки исключений. (см. п. 15.2 в стандарте)
P>кстати auto_ptr<> тут не задействуется, т.к. исключение происходит до вызова его конструктора.
Все, спасибо — разобрался
Как я и предполагал, я не внимательно прочитал 5.3.4, а именно 5.3.4.8 и 5.3.4.17.