shared_ptr使用场景 1. 什么是shared_ptr std::shared_ptr是C++11标准库中的一种智能指针,用于自动管理动态分配对象的生命周期。它通过引用计数机制来实现多个shared_ptr实例共享同一个对象,当最后一个shared_ptr被销毁或重置时,它会自动释放所管理的对象内存,从而避免内存泄漏。
#include<memory> //使用shared_ptr需要包含这个头文件 using namespace std; void g(void){ shared_ptr<int> ptr = make_shared<int>();//手动申请一个堆上的无名int变量,交给智能指针对象ptr来管理 int b; //这里无须手动释放ptr指向的内存,ptr的析构函数会释放 } void f(void){ int x; int y; ...
为了避免循环引用导致的内存泄漏,我们可以使用 std::shared_ptr 和std::weak_ptr 来管理它们的生命周期。 // 循环引用的使用场景 #include <iostream> #include <memory> class B;//前向声明 class A{ public : std::shared_ptr<B> b_ptr;//此处引用了B ~A(){std::cout<<"A的析构"<<std::endl;...
#include<memory>voidmanageResource(std::unique_ptr<int>ptr){// 使用资源}// ptr在此处自动销毁,资源被释放intmain(){autoptr=std::make_unique<int>(42);// 创建并初始化unique_ptrmanageResource(std::move(ptr));// 移动所有权到函数内// ptr现在为空,资源已在manageResource内部被释放return0;} s...
构造方式:可以使用直接初始化、复制构造、移动构造等方式构造shared_ptr。推荐使用std::make_shared辅助函数,它在初始化时提供更灵活且高效的内存管理。操作:shared_ptr支持*和>操作符,用于访问和操作所指向的对象。同时,支持与其他shared_ptr的比较操作。四、shared_ptr的常用函数与应用场景 基础应用:...
对象间共享数据,对象的创建与销毁相分离,这是shared_ptr的主要应用场景之一。它允许在不直接管理内存的情况下,实现资源的共享。当动态对象被放入容器时,使用shared_ptr进行包装会比unique_ptr更合适,因为它能处理对象的引用计数,自动管理内存,避免内存泄漏。在管理动态数组时,需要明确指定Deleter以支持...
unique_ptr则“独占”所指向的对象。 标准库还定义了一种名为weak_ptr的伴随类,它是一种弱引用,指向shared_ptr所管理的对象,他不控制对象生命周期, 虽然指向shared_ptr指针指向的对象的内存,却并不拥有该内存。 这三种智能指针都定义在memory头文件中。
shared_ptr使用场景,陷阱,性能分析与使用建议 shared_ptr<int>create0(int value){returnmake_shared<int>(value);//创建一个指向值为 10 的 int 对象的共享指针}voidmyfunc(int value){shared_ptr<int>ptmp=create0(10);return;//ptmp离开了作用域会被释放}intmain(){myfunc(12);//这是12没用,单纯为了...
从一个weak_ptr构造shared_ptr,这使得weak_ptr的使用具有线程安全性,因为指向weak_ptr参数的共享资源引用计数将会+1(weak_ptr不影响共享资源的引用计数)。 template <class U> shared_ptr (auto_ptr<U>&& x); 从auto_ptr中获取x保存的指针的所有权,方法是保存x保存的指针的一份拷贝并 对x调用release。