智能指针

std::unique_ptr<>

初始化:直接初始化、右值赋值、std::move
作为函数返回值
作为函数形参

#include <iostream>
using namespace std;
class Base{
public:
    Base(int val=0) : val_(val){
        cout << "Base ctor  " << val_ << "\n"; 
    }
    ~Base()
    {
        cout << "------------------------Base dctor  " << val_ << "\n"; 
    }

    void GetVal()
    {
        cout << "val is " << val_;
        cout << "\n\n";
    }
private:
    int val_;
};

std::unique_ptr<Base> GetBase(int n){
    std::unique_ptr<Base> base;
    base.reset(new Base(n));
    return std::move(base);
}

int main(){
    
    //std::unique_ptr<Base> pBase(std::move(GetBase()));
    //auto pBase = GetBase();
    //unique_ptr初始化:直接初始化、右值赋值、std::move
    std::unique_ptr<Base> pBase1(new Base(1));
    std::unique_ptr<Base> pBase2(new Base(2));


    //unique_ptr是返回值
    std::unique_ptr<Base> pBase3;
    pBase3 = GetBase(44);
    pBase1 = GetBase(55);
    //pBase3 = std::unique_ptr<Base>(new Base(3)); //rvalue

    std::unique_ptr<Base> pBase4;
    pBase4 = std::move(pBase1);  //std::move

    Base* base = pBase1.get();

    //unique_ptr作为形参,一般是通过std::move移交转移权

    //unique_ptr release():释放指针独占权,返回指向对象的指针,并将内部指针设为null
    //unique_ptr reset():释放指针独占权,回收对象内存,无返回值
    base = pBase2.release();
    delete base;
    Base *base2 = pBase2.get();

    //pBase2 = std::move(pBase1);
    //pBase1.reset(pBase2.get());
    
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 什么是智能指针? 智能指针是行为类似于指针的类对象,但这种对象还有其他功能。 2. 为什么设计智能指针? 引...
    MinoyJet阅读 3,793评论 0 1
  • 导读## 最近在补看《C++ Primer Plus》第六版,这的确是本好书,其中关于智能指针的章节解析的非常清晰...
    小敏纸阅读 6,049评论 1 12
  • C++智能指针 原文链接:http://blog.csdn.net/xiaohu2022/article/deta...
    小白将阅读 11,787评论 2 21
  • 本文根据众多互联网博客内容整理后形成,引用内容的版权归原始作者所有,仅限于学习研究使用,不得用于任何商业用途。 智...
    深红的眼眸阅读 4,059评论 0 0
  • 文/得一 我读书有个习惯:带着我的问题,去看作者有没有好的解决方案。 当然,这种方法比较适用于商业、非虚构类等实用...
    得一说阅读 4,948评论 1 11