Нет, если целью функции является создание экземпляра некоторых данных и передача их другому объекту. (Гипотетический) пример из игровой индустрии:
void AddProjectileAtPoint(int x, int y)
{
Projectile *p = new Projectile(x, y);
mProjectileManager->Add(p); //"mProjectileManager"'s job is to hold all projectiles and update them every frame...
}
В этом случае цель явно состоит в том, чтобы создать новый объект, представляющий некоторые данные, и сохранить его где-нибудь для дальнейшего использования.
Очевидно, что в некоторой точке должно быть совпадение delete
, но не внутри функции, в которой происходит new
. Это нормально, если есть четко определенная процедура передачи ответственности за управление new
'd памятью другому компоненту.
В этом случае структура такова, что «Менеджер снарядов» берет на себя ответственность за все выданные ему снаряды, сохраняет их живыми столько, сколько требуется, и очищает память, когда это необходимо.