您当前的位置: 首页 >  c++

RuiH.AI

暂无认证

  • 0浏览

    0关注

    274博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C++学习 二、unique_ptr使用

RuiH.AI 发布时间:2022-01-16 22:23:24 ,浏览量:0

C++学习 二、unique_ptr使用
  • 前言
  • unique_ptr概述
  • 创建unique_ptr对象
    • 创建空unique_ptr对象
    • 通过堆指针创建unique_ptr对象
    • 通过std::make_unique()函数创建unique_ptr对象
  • unique_ptr成员函数
  • unique_ptr的操作符
  • 创建unique_ptr数组
  • 测试代码
  • 后记

前言

本篇继续C++11智能指针学习,unique_ptr

unique_ptr概述

与shared_ptr类似,unique_ptr也有自动释放空间的特性,不需要手动释放空间和删除指针。

从名字上可以看出,unique_ptr独享内部指针和内存空间的所有权,当unique_ptr对象被销毁时,其独占的内存空间和内部指针都会被释放和销毁。

同时,同一个指针不能被两个unique_ptr对象关联,否则就会出现double free问题。

创建unique_ptr对象 创建空unique_ptr对象
std::unique_ptr p1();
std::unique_ptr p2(nullptr);
通过堆指针创建unique_ptr对象
std::unique_ptr p3(new int);

注意:与shared_ptr类不同,unique_ptr类没有拷贝构造函数!以下创建方法报错:

//std::unique_ptr p4(p3); //error!

注意:与shared_ptr类类似,unique_ptr类也没有构造函数隐式转换,以下创建方法报错:

//std::unique_ptr p4 = new int; // error!
通过std::make_unique()函数创建unique_ptr对象

注意:C++11没有提供make_unique函数,但C++14提供了。

std::make_unique p4 = std::make_unique(134);
unique_ptr成员函数

与shared_ptr类似,unique_ptr类也有其成员函数,并且许多功能相同。 reset(T *p)释放当前内部指针指向的内存空间,并把指针变为nullptr;如果参数p为普通指针,则释放后把内部指针变为p。

get()获得内部指针。

swap(std::unique_ptr &p)把两个unique_ptr对象的内部指针做交换。

release()切断对象与内部指针的联系,不会释放内存空间。返回内部指针,对象的内部指针变为nullptr。

get_deleter()获得对象的删除器。

unique_ptr的操作符

unique_ptr类重载了指针运算符*,->

std::unique_ptr p(new int(1));
*p;

也重载了赋值运算符=,但是只能用于右值为nullptr或者左值为空的情况。

std::unique_ptr pp;
pp = std::unique_ptr(new int(5));
pp = nullptr;

unique_ptr也有>,

关注
打赏
1658651101
查看更多评论
立即登录/注册

微信扫码登录

0.1353s