1. auto_ptr: c++11中推荐不使用他(放弃) 2.shared_ptr:拥有共享对象所有权语义的智能指针 3.unique_ptr:拥有独有对象所有权语义的智能指针 4.weaked_ptr:到std::shared_ptr所管理对象的弱引用 1.1 shared_ptr 参考:https://zh.cppreference.com/w/cpp/memory/shared_ptr std::shared_ptr是通过指针保持对...
但这里如果把auto_ptr换成shared_ptr或unique_ptr后,程序就不会崩溃,原因如下: 使用shared_ptr时运行正常,因为shared_ptr采用引用计数,pwin和films[2]都指向同一块内存,在释放空间时因为事先要判断引用计数值的大小因此不会出现多次删除一个对象的错误。 使用unique_ptr时编译出错,与auto_ptr一样,unique_ptr也采...
3.shared_ptr 为了解决auto_ptr以及unique_ptr的局限性,C++又推出了shared_ptr。 shared_ptr使用一个引用计数器,类似java中对象垃圾的定位方法,如果有一个指针引用某块内存,则引用计数+1,释放计数-1.如果引用计数为0,则说明这块内存可以释放了。 模型如下: 引用计数让我们的可以有多个指针拥有使用权,但是这种方式...
shared_ptr<int> sp(newint(10));//一个指向整数的shared_ptrassert(sp.unique());//现在shared_ptr是指针的唯一持有者shared_ptr<int> sp2 = sp;//第二个shared_ptr,拷贝构造函数assert(sp == sp2 && sp.use_count() ==2);//两个shared_ptr相等,指向同一个对象,引用计数为2*sp2 =100;//使用...
unique_ptr shared_ptr weak_ptr 它们都在内存头文件中声明。 文章来源丨极客(geeksforGeeks) auto_ptr 从C ++ 11开始不推荐使用此类模板。unique_ptr是一种具有类似功能但具有改进的安全性的新功能。 auto_ptr是一个智能指针,用于管理通过新表达式获得的对象,并在销毁auto_ptr本身时删除该对象。
而 C++ 虽然从来没有公开得支持过垃圾回收机制,但 C++98/03 标准中,支持使用 auto_ptr 智能指针来实现堆内存的自动回收;C++11 新标准在废弃 auto_ptr 的同时,增添了 unique_ptr、shared_ptr 以及 weak_ptr 这 3 个智能指针来实现堆内存的自动回收。
1、如果你真的需要使用独有的资源(对象),使用shared_ptr而不是unique_ptr会使你的代码容易出现资源泄露和一些bug。 不易察觉的bug:有没有想过这种情况,如果有其他程序员无意间通过赋值给另一个共享指针而修改了你共享出来的资源/对象,而你却从没有预料到这种事情!
shared_ptr 是一种共享式智能指针,多个指针可以共享同一块内存,并使用引用计数来追踪指针数量。当引用计数为 0 时,释放内存。shared_ptr 的优势在于可以解决多个指针共享同一块内存的问题,同时可以避免资源泄漏。 但其缺陷在于存在循环引用问题,即一组 sha...
cout<<"test shared_ptr base usage:"<<endl; shared_ptr<string>p1=make_shared<string>(""); if(p1&&p1->empty()) *p1="hello"; auto p2=make_shared<string>("world"); cout<<*p1<<' '<<*p2<<endl; cout<<"test shared_ptr use_count:"<<endl; ...
STL 智能指针 auto_ptr、unique_ptr、shared_ptr 和 weak_ptr。 auto_ptr 在 C++11已被摒弃,在C++17中已经移除不可用...