zoukankan      html  css  js  c++  java
  • 智能指针unqiue_ptr

    unique_ptr

      unique_ptr 对它指向的对象在同一时刻是独占的。它要么在构造的时候使用内置指针初始化,要么使用reset给其赋值。当unique_ptr被销毁时,它所指向的对象也被销毁。

    unique<int> up1;        //默认构造,up1包含一个空指针
    unique<int> up2(new int(1));        //使用内置指针初始化up2
    unique<int> up4(up2.release());
    unique<int> up3(up2); //错误,unique_ptr不支持拷贝 up3 = up2; //错误,unique_ptr不支持赋值 up3 = new int(0) ; //错误,不支持赋值

      unique_ptr特有的操作:

    unique_ptr<T> up1 空unique_ptr,可以指向类型为T的对象,up1使用delete来释放它的指针
    unique_ptr<T,D> up2 up2将使用一个类型为D的可调用对象来释放它的指针
    unique_ptr<T,D> up3(d) 空unique_ptr,指向类型为T的对象,用类型为D的对象d代替delete
    up4 = nullptr 释放up4所指向的对象,将up4置为空
    up4.release() u放弃对指针的控制权,返回指针,并将u置为空。如果不用另外一个指能指针来保存release的结果,那么要注意使用delete释放它。
    up.reset() 释放up指向的对象
    up.reset(q) 令up指向内置指针q所指向的对象,up原来指向的对象被释放
    up.reset(nullptr) 将up置为空

      unique_ptr不支持拷贝和赋值,但是这一点在函数调和返回上是不成立的。

    weak_ptr

      weak_ptr是一种不控制指向对象生存周期的智能指针,它指向一个由shared_ptr管理的对象。将一个weak_ptr绑定到一个shared_ptr上不会改变shared_ptr的引用计数,一旦最后一个shared_ptr被销毁,对象就被释放。即使有weak_ptr指向对象,对象也还是会被释放。

    weak_ptr<T> w 空weak_ptr可以指向类型为T的对象
    weak_ptr<T> w(sp) 与shared_ptr sp指向相同对象的weak_ptr。T必须能转换为sp指向的类型
    w = p p可以是一个shared_ptr或一个weak_ptr。赋值后w与p共享对象
    w.reset() 将w置为空
    w.use_count() 与w共享对象的shared_ptr的数量
    w.expired() 若w.use_count()返回为0,则expired()返回true,否则返回false
    w.lock() 如果expired为true,返回一个空shared_ptr;否则返回一个指向w的对象的shared_ptr

       不能直接使用w来访问对象,因为它可能并没有指向对象,此时必须调用lock来判断weak_ptr指向的对象是否存在。

  • 相关阅读:
    scanf函数读入整数后接着读字符串的换行符残余问题
    二分查找的细节
    PAT 1016 Phone Bills
    1044. Shopping in Mars (25)-PAT甲级真题(二分查找)
    第0次作业
    FPGA开发流程
    quartus2 13.0+modelsim联合开发环境搭建(win10)
    50 years of Computer Architecture: From the Mainframe CPU to the Domain-Specific TPU and the Open RISC-V Instruction Set
    2018.11.26-11.30工作总结
    《步步惊“芯”——软核处理器内部设计分析》前两章读书笔记
  • 原文地址:https://www.cnblogs.com/ToBeExpert/p/10059566.html
Copyright © 2011-2022 走看看