这篇讲得很好
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指向的对象,但不会对引用计数产生影响
删除器:
标签:指向,计数,2522%,C++,智能,shared,ptr,指针 From: https://www.cnblogs.com/jiayu-code/p/16648624.html