Да, unique_ptr
попытается удалить объект после того, как он выйдет из области видимости в этом случае.Фактически, пример, который вы показали выше, является идеальным способом проиллюстрировать одно из ключевых свойств unique_ptr
: если у вас есть ресурс, управляемый unique_ptr
, вы не должны пытаться управлять этим ресурсом самостоятельно вне unique_ptr
.В конце концов, контракт с unique_ptr
означает, что unique_ptr
владеет исключительно ресурсом, поэтому, если вы берете этот ресурс и освобождаете его самостоятельно, вы нарушаете контракт.
Другими словами, чтоunique_ptr
делает это немного сильнее, чем «позволяет нам не беспокоиться о необходимости вручную удалять ресурс».Скорее, он принимает на себя полную и исключительную ответственность за управление ресурсом.
Подобные проблемы могут возникнуть, скажем, с shared_ptr
, который предполагает, что все владение ресурсом распределяется между различными shared_ptr
сresource.
Если вы хотите явно освободить ресурс перед возвратом функции, используйте функцию reset
:
res1.reset(); // Cleans up the resource.