zoukankan      html  css  js  c++  java
  • 实战c++中的vector系列--vector<unique_ptr<>>初始化(全部权转移)

    C++11为我们提供了智能指针,给我们带来了非常多便利的地方。

    那么假设把unique_ptr作为vector容器的元素呢?

    形式如出一辙:vector<unique_ptr<int> > vec;

    可是怎么给vec加入元素呢?

    看以下:

    #include<iostream>
    #include<vector>
    #include <memory>
    using namespace std;
    int main()
    {
        vector<unique_ptr<int>> vec;
        vec.push_back(1);//错误
        return 0;
    }

    那么先定义一个unique_ptr,再进行push_back():

    #include<iostream>
    #include<vector>
    #include <memory>
    using namespace std;
    int main()
    {
        vector<unique_ptr<int>> vec;
        unique_ptr<int> sp(new int(126));
        vec.push_back(sp);//尝试引用已删除的函数
        return 0;
    }

    这就是unique智能指针的全部权问题。这个时候就须要使用std::move:

    #include<iostream>
    #include<vector>
    #include <memory>
    using namespace std;
    int main()
    {
        vector<unique_ptr<int>> vec;
        unique_ptr<int> sp(new int(126));
    
        //vec.push_back(1);
    
        vec.push_back(std::move(sp));//尝试引用已删除的函数
        cout << *vec[0]<< endl;  // 输出126
        //cout << *sp << endl;
        return 0;
    }

    可是此时,上面代码的sp编程了什么呢? 使用*取值看一下,结果程序崩溃,原因何在?
    就是此时sp已经释放,全部权转移了!

  • 相关阅读:
    gost源码分析心得
    go语言net编程,设置TCP连接发出使用源IP
    代理程序gost使用
    squid关闭缓存
    shell中的if比较
    10年以上年化20%以上收益率的基金经理
    股票信息查询
    02.win2003虚拟机安装和dos命令
    01.网络安全和虚拟机
    部署kali渗透环境
  • 原文地址:https://www.cnblogs.com/lytwajue/p/7398748.html
Copyright © 2011-2022 走看看