释放智能指针中的内存

时间:2014-09-27 02:08:08

标签: c++11 memory-management smart-pointers

当我们使用动态分配的内存时,delete命令的用处是显而易见的 - 我们需要让程序知道不再需要指针的内存并且可以重新调整用途。

C ++ 11中的智能指针(例如unique_ptr)具有看似用于类似目的的成员函数:release()。我认为使用智能指针的目的是避免必须手动处理内存释放。在这种情况下,为什么提供release()函数似乎毫无意义?

(双关语)

2 个答案:

答案 0 :(得分:2)

unique_ptr::release不等同于在托管指针上调用delete。当您希望拥有堆分配对象的唯一实体时,将使用unique_ptrunique_ptr::release放弃所有权并返回原始指针。可能存在这样的情况,即您不再希望unique_ptr拥有托管数据但尚未销毁该对象 - 也许您希望调用遗留API,该API采用普通指针并承担其所有权。或许您希望您的界面收到unique_ptr但有许多shared_ptr可以在实施中访问它。因此,实施将release unique_ptr,并将所有权转移到一个或多个shared_ptr

答案 1 :(得分:1)

unique_ptr仅在内存超出范围或分配新指针时自动释放内存,但您可能希望在此之前释放内存(最明显的原因是优化内存使用)。