опять auto_ptr
От: Igor_G http://www.brainbench.com/transcript.jsp?pid=5064617
Дата: 14.07.06 21:49
Оценка:
Наверное такой вопрос задавали. но видимо я плохо искал

Так вот, будет ли утечка памяти в коде ниже?
Тестировал на 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;
}
Re: опять auto_ptr
От: dotidot Россия  
Дата: 15.07.06 04:00
Оценка:
Здравствуйте, Igor_G, Вы писали:

I_G>Наверное такой вопрос задавали. но видимо я плохо искал


I_G>Так вот, будет ли утечка памяти в коде ниже?


не знаю что говорит стандарт, но утечки вроде нет, потому что до конструирования дело не доходит.
Re[2]: опять auto_ptr
От: perf13  
Дата: 15.07.06 05:09
Оценка:
тут утекать еще нечему, т.к. исключение возникает до вызова new
Re[3]: опять auto_ptr
От: Igor_G http://www.brainbench.com/transcript.jsp?pid=5064617
Дата: 15.07.06 08:56
Оценка:
Здравствуйте, perf13, Вы писали:

P>тут утекать еще нечему, т.к. исключение возникает до вызова new


В том-то и дело, что VC сначала new вызывает, а потом только calc_foo_param(). Поэтому и возник вопрос, так как исключение возникает после фактического распределения памяти.
Re[4]: опять auto_ptr
От: perf13  
Дата: 15.07.06 10:38
Оценка: 1 (1)
I_G>В том-то и дело, что VC сначала new вызывает, а потом только calc_foo_param().
I_G>Поэтому и возник вопрос, так как исключение возникает после фактического распределения памяти.

да, действительно, оказывается так и происходит.
но в любом случае утечки не будет, т.к. выделенная память освободится механизмом обработки исключений. (см. п. 15.2 в стандарте)
кстати auto_ptr<> тут не задействуется, т.к. исключение происходит до вызова его конструктора.
Re[5]: опять auto_ptr
От: Igor_G http://www.brainbench.com/transcript.jsp?pid=5064617
Дата: 15.07.06 20:10
Оценка: 4 (1)
P>да, действительно, оказывается так и происходит.
P>но в любом случае утечки не будет, т.к. выделенная память освободится механизмом обработки исключений. (см. п. 15.2 в стандарте)
P>кстати auto_ptr<> тут не задействуется, т.к. исключение происходит до вызова его конструктора.

Все, спасибо — разобрался
Как я и предполагал, я не внимательно прочитал 5.3.4, а именно 5.3.4.8 и 5.3.4.17.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.