文章目录
问题
std::unique_ptr用于管理动态分配的对象的生命周期,那么这种智能指针怎么实现管理生命周期的呢?
解释
- 用于确保对象不再使用时自动释放,从而避免内存泄漏。
std::unique_ptr
独占管理对象的所有权,同一时间只能有一个std::unique_ptr
指向该对象。确保对象的生命周期,由std::unique_ptr
完全控制;所谓的管理,就是可以自动释放资源,当然也可以显示的重置,通过调用reset
方法显式释放资源。超出作用域,析构函数会被调用,自动释放资源。 - 和
std::shared_ptr
的区别。std::unique_ptr
独占所管理对象的所有权,不能被复制,只能被移动。std::move()
.std::shared_ptr
允许多个智能指针共享同一个对象的所有权。对象会在最后一个std::shared_ptr
被销毁时自动释放。- 引用计数:
std::shared_ptr
使用引用计数来跟踪有多少个指针共享同一个对象。每次复制std::shared_ptr
时,引用计数增加;每次销毁std::shared_ptr
时,引用计数减少。