对share_ptr,属于强引用型的智能指针。内部通过引用计数实现对对象的管理,在引用计数为0时,自动释放对象。使用share_ptr的缺点是:会造成对象的循环引用,导致对象永远无法释放,比如:
Share_ptr可以在多线程中使用,确保指针指向的对象是有效的。
Weak_ptr是弱引用性的智能指针。Weak_ptr不对造成对象的引用技术的增加。因此不会造成对象的循环引用,weak_ptr可以通过引用计数或者 成员函数expired来判断对象是否已经释放。在访问对象时。但是在使用时需要把weak_ptr转换为share_ptr指针比如:
shared_ptr<string> sp (new string("code")); cout<<*sp<<endl; weak_ptr<string> wp = sp; cout<<wp.use_count()<<endl; cout<<wp.lock()->c_str()<<endl; shared_ptr<string> tempsp(wp); cout<<wp.use_count()<<endl; cout<<*tempsp<<endl;
时间: 2024-12-15 01:41:44