Вы должны беспокоиться не о создании, а об удалении.
С помощью интеллектуальных указателей (вид подсчета ссылок) объекты обычно могут принадлежать нескольким другим объектам, и когда последняя ссылка выходит из области видимости, объект автоматически удаляется. Таким образом, вам больше не придется ничего удалять вручную, вы можете утечь память только при наличии циклических зависимостей, и ваши объекты никогда не будут удалены из других источников за вашей спиной.
Тип «только для одного владельца» (std::auto_ptr
) также освобождает вас от обязанности удаления, но разрешает использовать только одного владельца за раз (хотя право собственности может быть передано). Это полезно для объектов, которые вы передаете как указатели, но вы все равно хотите, чтобы они автоматически очищались, когда они выходят из области видимости (чтобы они хорошо работали в контейнерах, и развертывание стека в случае исключения работает, как и ожидалось).
В любом случае, умные указатели делают владение явным образом в вашем коде не только для вас и ваших товарищей по команде, но и для компилятора - неправильное выполнение этого может привести к ошибке компилятора или относительно простой во время выполнения ошибки поймать с защитным кодированием. В коде, управляемом вручную памятью, легко где-то неправильно понять ситуацию с владением (из-за неправильного прочтения комментариев или неправильного восприятия), и, как правило, эту ошибку обычно трудно отследить - вы потеряете память, перезапишите вещи это не ваше, программа аварийно завершает работу и т. д .; у всех них есть общее, что ситуация, в которой возникает ошибка, не связана с нарушением кода.