Изменения

Перейти к: навигация, поиск

Участник:Yulya3102/Плюсы2сем

793 байта добавлено, 19:35, 9 марта 2013
stack unwinding
=== исключения в деструкторах ===
=== stack unwinding ===
void func( int x )
{
char* pleak = new char[1024]; // might be lost => memory leak
std::string s( "hello world" ); // will be properly destructed
if ( x ) throw std::runtime_error( "boom" );
delete [] pleak; // will only get here if x != 0
}
int main()
{
try
{
func( 10 );
}
catch ( const std::exception& e )
{
return 1;
}
return 0;
}
Here memory allocated for pleak will be lost if exception is thrown, while memory allocated to s will be properly released by std::string destructor in any case. The objects allocated on the stack are "unwound" when the scope is exited (here the scope is of the function func.) This is done by the compiler inserting calls to destructors of automatic (stack) variables.
 
=== возврат объектов из функции по значению, RVO ===
=== передача аргументов по значению, r-value/l-value ===
355
правок

Навигация