zoukankan      html  css  js  c++  java
  • 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已经释放,所有权转移了!

  • 相关阅读:
    git 去除对某个文件的版本控制
    10:08 小记
    写读书笔记
    恢复已删除且已添加至暂存区的文件
    第七周
    第六周
    软件测试
    短信获取
    Android-8
    增删改查
  • 原文地址:https://www.cnblogs.com/noticeable/p/14861894.html
Copyright © 2011-2022 走看看