Рядом со всеми интересными ответами о куче и о том, что new и delete происходят близко друг к другу, я мог бы добавить, что следует избегать явного наличия большого количества кода в одной функции. Если огромное количество кода разделяет две связанные строки кода, это еще хуже.
Я бы различал «количество работы» и «количество кода»:
void do_stuff( char* const p );
void formerly_huge_function() {
char* p = new char[5];
CoInitialize( NULL );
do_stuff( p );
CoUninitialize();
delete[] p;
}
Теперь do_stuff
может многое сделать, не мешая распределению. Но и другие симметричные вещи остаются вместе таким образом.
Все дело в парне, который будет поддерживать ваш код. Это может быть ты, через месяц.