zoukankan      html  css  js  c++  java
  • weak_ptr_c++11

    unique_ptr 替代了原来的auto_ptr,指向对象具有唯一性,即同一时间只能有unique_ptr指向给定对象(和auto_ptr不同是禁止拷贝语义,
    通过移动语义替代)

    unique_ptr对象生命周期与其作用域范围保持一致,从创建直至其离开作用域

    unique_ptr 指针和其所绑定对象关系:在智能指针生命周期内,可以改变其绑定对象,可以通过reset()重新指定,可以通过release方法释放其所有权,通过移动语义来转移其所有权

    一、初始化方式
    通过new
    unique_ptr<Investment> up(new Investment());

    通过普通指针
    Investment *pInv = new Investment();
    unique_ptr<Investment> up1(pInv);

    通过make_unique
    auto pInv = make_unique<Investment>();

    通过move()函数
    unique_ptr<Investment> up1 = std::move(up);


    注意:unique_ptr不能被复制或者拷贝,下面的代码将出错:
    unique_ptr<Investment> up1(up);              //error, can not be copy
    unique_ptr<Investment> up2 = up;            //error, can not be assigned

    但是,unique_ptr可以作为函数的返回值:
    unique_ptr<Investment> GetPtr();        //function getthe unique pointer
    unique_ptr<Investment> pInv = GetPtr(); // ok


    unique_ptr 基本操作
    unique_ptr<Investment> pInvestment;     // 创建一个空的智能指针
    pInvestment.reset(new Investment());    //"绑定”动态对象
    Investment *pI = pInvestment.release(); //释放所有权
    pI= nullptr;                         //显式销毁所指对象,同时智能指针变为空指针。


    管理动态数组
    由于unique_ptr有std::unique_ptr<T[]>的重载函数,所以它可以用来管理数组资源
    unique_ptr<int[]> pArray(new int[3]{1,3,3});

  • 相关阅读:
    MySQL_解决ERROR 2006 (HY000) at line XX MySQL server has gone away问题
    mysql全量备份脚本
    mysql增量备份脚本
    使用u32过滤器设置基于mac地址的下载限制
    Quantum & r2q
    关于limit hashlimit资料整理
    u32 mac以及arp匹配
    Iptables 规则 一些简单实例和详细介绍
    Optimizing shaper — hashing filters (HTB)
    使用ingress qdisc和ifb进行qos
  • 原文地址:https://www.cnblogs.com/henryliublog/p/9055806.html
Copyright © 2011-2022 走看看