Cra*_*ins 2 c++ memory memory-leaks smart-pointers unique-ptr
鉴于以下情况:
{
std::unique_ptr<char[]> foo;
foo = std::make_unique<char[]>(100);
foo = std::make_unique<char[]>(200);
}
Run Code Online (Sandbox Code Playgroud)
在第二次调用中重新分配 foo 时,第一次调用 make_unique 时分配的内存是否被释放?
Rem*_*eau 10
这段代码没有泄漏。 当从分配给它的另一个所有权转移时,operator=forstd::unique_ptr将调用现有内存的Deleter(在本例中为delete[])unique_ptr。
每个 cppreference:
std::unique_ptr<T,Deleter>::operator=
将所有权从
rto转移,*this就像通过调用reset(r.release())后跟get_deleter()from的赋值一样std::forward<E>(r.get_deleter())。
std::unique_ptr<T,Deleter>::reset
鉴于
current_ptr,由 管理的指针按*this以下顺序执行以下操作:
- 保存当前指针的副本
old_ptr = current_ptr- 用参数覆盖当前指针
current_ptr = ptr- 如果旧指针不为空,则删除之前管理的对象
if(old_ptr) get_deleter()(old_ptr)