当我们使用动态分配的内存时,delete
命令的用处是显而易见的 - 我们需要让程序知道不再需要指针的内存并且可以重新调整用途。
C ++ 11中的智能指针(例如unique_ptr
)具有看似用于类似目的的成员函数:release()
。我认为使用智能指针的目的是避免必须手动处理内存释放。在这种情况下,为什么提供release()
函数似乎毫无意义?
(双关语)
答案 0 :(得分:2)
unique_ptr::release
不等同于在托管指针上调用delete
。当您希望拥有堆分配对象的唯一实体时,将使用unique_ptr
。 unique_ptr::release
放弃所有权并返回原始指针。可能存在这样的情况,即您不再希望unique_ptr
拥有托管数据但尚未销毁该对象 - 也许您希望调用遗留API,该API采用普通指针并承担其所有权。或许您希望您的界面收到unique_ptr
但有许多shared_ptr
可以在实施中访问它。因此,实施将release
unique_ptr
,并将所有权转移到一个或多个shared_ptr
。
答案 1 :(得分:1)
unique_ptr
仅在内存超出范围或分配新指针时自动释放内存,但您可能希望在此之前释放内存(最明显的原因是优化内存使用)。