C++智能指针unique_ptr, shared_ptr

智能指针是对裸指针进行了包装,能够自动释放所指向的对象
C++智能指针主要有四种auto_ptr, unique_ptr, shared_ptr, weak_ptr;
auto_ptr是C++98,目前不建议使用,已经被unique_ptr取代, 剩余三种都是C++11。unique_ptr是独占式智能指针,不能复制和赋值。shared_ptr是共享式智能指针,用引用计数的方法管理指针。weak_ptr是用来辅助shared_ptr的

  1. unique_ptr
    独占式智能指针,同一时刻只能一个unique_ptr指向一个对象
    //声明int指针,默认初始化
    unique_ptr<int> p1(new int);
    //声明int指针,指向对象初始化为10
    unique_ptr<int> p2(new int(10));
    //声明int数组,数组大小为32
    unique_ptr<int[]> p3(new int[32]);
    
    //不能复制和赋值,但是可以移动
    unique_ptr<int> p11 = std::move(p1);  //p1就空了
    //错误示范
    unique_ptr<int> p22(p2);  //不可以!!!!不能复制
    unique_ptr<int> p22 = p2;  //不可以!!!不能复制
    
    //成员函数
    //.release()释放,返回裸指针
    int *p = p2.release();
    delete p;
    
    //reset()成员函数,不带参数,把unique_ptr置空,带参数,重置
    unique_ptr<int> p4(new int(0));
    unique_ptr<int> p5(new int(0));
    p4.reset();
    //或者
    p5.reset(new int(1));
    
  2. shared_ptr
    共享式智能指针,多个shared_ptr可以指向同一个对象
    //初始化方法
    shared_ptr<int> p1(new int);
    shared_ptr<int> p2(new int(0));
    shared_ptr<int> p3 = std::make_shared<int>(0);
    //数组指针
    shared_ptr<int[]> p4(new int[32]);
    
    //成员函数
    //.unique()  是不是独占,只有一个shared_ptr指向这个对象
    //.reset()  不带参数,引用计数减1,如果减为0了,释放对象
    //带参数,引用计数减1,并指向新的对象
    //.get()  获得裸指针
    

猜你喜欢

转载自blog.csdn.net/qq_41253960/article/details/125821569