shared_ptr和unique_ptr weak_ptr
时间: 2023-05-08 11:58:20 浏览: 176
shared_ptr
shared_ptr和unique_ptr都是C++11中引入的指针类型,它们在智能指针管理下的动态内存分配中起着重要作用。
shared_ptr是一种计数型智能指针,可以动态地掌控一块内存,在创建新的shared_ptr对象时计数器增加,同时将该内存空间的控制权转移给该新对象。当引用计数器为0时,该内存在控制权转移到的最后一个对象销毁后会自动释放。
相对于shared_ptr,unique_ptr是一种独占型智能指针,在内存控制权转移时不适用计数器,而是将控制权完整地转移到新对象中,从而实现内存的动态管理。unique_ptr在不需要再共享相关资源时不仅更快也更安全,可以防止使用不同指针同时访问某一块内存所引发的问题。
weak_ptr是一种弱引用型智能指针,它可以引用shared_ptr所管理的内存空间,但不会改变内存的引用计数,这意味着,当其他所有shared_ptr指针被销毁时,被weak_ptr暗示的内存却不会自动释放,避免了悬空指针或内存泄漏的问题。通过lock()函数可以将weak_ptr转换为对应的shared_ptr,如果锁定成功,就可以用shared_ptr安全地访问该内存空间了。
因此,shared_ptr和unique_ptr各有优缺点,需要视情况选择使用。而weak_ptr则是shared_ptr的补充,可以避免悬空指针、内存泄漏等问题。
阅读全文