【C++】智能指针

这篇讲得很好

https://blog.csdn.net/sjp11/article/details/123899141?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166201751616781790748003%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166201751616781790748003&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-123899141-null-null.142^v44^new_blog_pos_by_title&utm_term=%E6%99%BA%E8%83%BD%E6%8C%87%E9%92%88&spm=1018.2226.3001.4187

 

要点:

auto_ptr:同时只能允许一个指针指向一块内存区域,比如p1指向a,此时如果让p2也指向a,那么p1就会自动至nullptr,所以有访问空指针的风险

unique_ptr:独享,禁止使用拷贝和赋值

shared_ptr:允许多个指针同时指向一块内存,通过维护一个引用计数的方式实现,每有一个指针指向同一块内存,引用计数就+1,每取消一个指针指向同一块内存,引用计数就-1,在最后一个指针释放的时候引用计数减为0,此时才会真正释放那块内存

shared_ptr会出现循环引用的问题,比如双向链表中的两个结点

weak_ptr:解决了shared_ptr的不足,它可以指向shared_ptr指向的对象,但不会对引用计数产生影响

删除器:

posted on 2022-09-02 09:14  甲鱼写代码  阅读(19)  评论(0编辑  收藏  举报

导航