共享同一块内存std::shared_ptr<int>ptr2=ptr1;// 增加引用计数std::cout<<ptr1.use_count()<<std::endl;// 输出: 2// 通过弱引用指针weak_ptr解决循环引用问题std::weak_ptr<int>weakPtr=ptr1;// 使用lock()函数获取一个shared_ptrstd::shared_ptr<int>ptr3=weak
shared_ptr、unique_ptr和weak_ptr是C++中智能指针的三种类型,它们用于管理动态分配的内存,避免内存泄漏和悬空指针的问题。 shared_ptr(共享指针): 概念:shared_ptr是一种引用计数智能指针,可以跟踪有多少个指针共享同一块内存资源。 优势:可以在多个地方共享同一块内存资源,当最后一个shared_ptr离开作用域时,...
weak_ptr是一种用于解决shared_ptr相互引用时产生死锁问题的智能指针。如果有两个shared_ptr相互引用,那么这两个shared_ptr指针的引用计数永远不会下降为0,资源永远不会释放。weak_ptr是对对象的一种弱引用,它不会增加对象的use_count,weak_ptr和shared_ptr可以相互转化,shared_ptr可以直接赋值给weak_ptr,weak_ptr...
std::unique_ptr<int> ptr3 = std::move(ptr1); // 正确:可以移动unique_ptr 3. weak_ptr weak_ptr是对一个shared_ptr所管理对象的弱引用。它不会增加引用计数,因此不会延长对象的生命周期。weak_ptr主要用于解决shared_ptr之间的循环引用问题。 语法: cpp std::weak_ptr<T> wptr = ptr; // ptr是...
C++智能指针介绍(shared_ptr,enable_shared_from_this,weak_ptr,unique_ptr) 一、shared_ptr shared_ptr,使用引用计数实现对同一块内存可以有多个引用,在最后一个引用被释放时,指向的内存才释放,这也是和unique_ptr最大的区别。基本用法: 输出: 这个智能指针的特性“在最后一个引用被释放时,指向的内存才释放”...
auto_ptr unique_ptr shared_ptr weak_ptr 它们都在内存头文件中声明。 auto_ptr 从C++ 11 开始不推荐使用此类模板。unique_ptr 是一个具有类似功能的新工具,但安全性有所提高。auto_ptr 是一个智能指针,它管理通过 new 表达式获得的对象,并在 auto_ptr 本身时删除该对象被销毁。当使用 auto_ptr 类描述对象...
weak_ptr是一种用于解决shared_ptr相互引用时产生死锁问题的智能指针。如果有两个shared_ptr相互引用,那么这两个shared_ptr指针的引用计数永远不会下降为0,资源永远不会释放。weak_ptr是对对象的一种弱引用,它不会增加对象的use_count,weak_ptr和shared_ptr可以相互转化,shared_ptr可以直接赋值给weak_ptr,weak_ptr...
在共享引用相互关联的情境下,若不采取恰当措施如使用weak_ptr,可能会导致资源无法正常释放,例如两个shared_ptr相互引用时,会形成资源释放瓶颈,无法正常执行析构函数。引入weak_ptr机制后,如将一个shared_ptr转换为weak_ptr,或在构造时即为weak_ptr,可有效解除引用计数锁定,保障资源得以正确清理。u...
unique_ptr、shared_ptr和weak_ptr都是C++11引入的智能指针,它们自动管理内存,帮助防止内存泄漏。它们的区别主要在于它们如何管理所指向对象的生命周期和所有权。 unique_ptr: 所有权唯一:unique_ptr拥有它所指向的对象,保证同一时间只有一个unique_ptr指向特定对象。
一、auto_ptr auto_ptr这是C++98标准下的智能指针,现在常常已经被C++标准的其他智能指针取代。它的缺点是在转移所有权后会使运行期不安全。C++11新标准,用unique_ptr来代替auto_ptr原有功能。 auto_ptr <double> pd; double *p_reg = new double;