首页 > 其他分享 >unique_ptr智能指针介绍

unique_ptr智能指针介绍

时间:2023-05-14 16:23:19浏览次数:42  
标签:所有权 自定义 对象 unique ptr 指针

unique_ptr是C++标准库提供的智能指针之一,具有以下特点:

  1. 独占所有权:unique_ptr独占指向对象的所有权,确保在任何时候只有一个unique_ptr可以指向同一个对象。当unique_ptr被销毁或转移所有权时,它会自动释放指向的对象,无需手动删除。

  2. 轻量高效:unique_ptr是一种轻量级的智能指针,通常与动态分配的单个对象(使用new表达式分配)相关联。由于没有额外的开销,它比较高效。

  3. 不可复制:unique_ptr是不可复制的,即不能进行拷贝构造或赋值操作。这是为了避免多个指针同时管理同一个对象,从而避免悬空指针和内存泄漏。

  4. 可移动:unique_ptr支持移动语义,可以通过std::move将所有权从一个unique_ptr转移到另一个unique_ptr。移动操作将转移所有权而不进行内存拷贝,提供了高效的资源管理。

  5. 自定义删除器:unique_ptr允许使用自定义的删除器来指定在释放对象时要执行的操作。删除器可以是函数指针、函数对象或Lambda表达式,允许在对象销毁时执行自定义清理操作。

总之,unique_ptr提供了一种安全且高效地管理动态分配的单个对象的方法,通过独占所有权移动语义,确保资源的正确释放和避免悬空指针问题。

标签:所有权,自定义,对象,unique,ptr,指针
From: https://www.cnblogs.com/kongyijin/p/17396626.html

相关文章

  • 【C++新特性】nullptr关键字
    原文链接:http://blog.csdn.net/xiejingfa/article/details/50478512 熟悉C++的童鞋都知道,为了避免“野指针”(即指针在首次使用之前没有进行初始化)的出现,我们声明一个指针后最好马上对其进行初始化操作。如果暂时不明确该指针指向哪个变量,则需要赋予NULL值。除了NULL之外,C++11新......
  • 指针进阶(2)——玩转指针
    今天内容不多,但都是精华。1.数组参数和指针参数2.函数指针2.1笔试题3.函数指针数组1.数组参数和指针参数例1:一维数组传参voidtest(intarr[]){}voidtest(intarr[10]){}voidtest(int*arr){}voidtest2(int*arr2[20]){}voidtest2(int**arr2){}传参的时候,*arr2......
  • 【Leetcode算法01】双指针Two Pointers
    TableofContents同向双指针剑指offer05.替换空格相向双指针344.反转字符串206.反转链表151.翻转字符串里的单词19.删除链表的倒数第N个节点160.相交链表142.环形链表II15.三数之和18.四数之和快慢双指针27.移除元素Solutions27.移除元素力扣题......
  • 双指针——最长连续不重复子序列(例)
    给定一个长度为n的整数序列,找出最长的不包含重复的数的连续区间,输出它的长度。数据范围: 输入样例:512235输出样例:3 #include<iostream>//C++标准库中的头文件.用于控制台输入和输出。#include<cstring>//用于处理字符串的函数和操作#include<algorithm>/......
  • 【双指针法】同向双指针&对撞双指针&快慢双指针
    #TableofContents###同向双指针*[27.移除元素](#27)*[344.反转字符串](#344)*[剑指offer05.替换空格](#05)*[151.翻转字符串里的单词](#151)###对撞双指针*[206.反转链表](#206)*[19.删除链表的倒数第N个节点](#19)*[283.移动零](#283)*[844.比较含退格的字......
  • 终于找到了C++成员函数做函数指针的完美解决办法
    当然,这是转自别人的:https://www.codenong.com/19808054/之前因为这个没少废精力啊,这里记一下,感谢外国友人的回答.1#include<iostream>2#include<functional>3#include<string>4#include<sstream>5#include<memory>67usingnamespacestd;89......
  • 《C和指针》阅读笔记
    总览第1章主要通过一个简单的C语言程序介绍了一些基本元素,如:注释,main函数等,用于快速了解C语言的大致结构和语法规则;第2章介绍了在C语言的运行环境以及C语言中的标识符;第3章主要讲解了C语言中基础的数据类型,如整型、浮点型等,以及变量的作用域和属性等重要知识;第4章介绍......
  • 初识指针
    指针:就是地址,是由解引用操作符来找到所想要的对象,指针变量:是用来存放别人的地址的内存是怎么编号的?一般计算机是32位或者64位,例:32位的计算机是有32根地址线而地址是物理线是可以通电的,正电就是1,负电就是0,而这些线全部通电有些电是正的有些是负的,而这些电就会产生电信号,电信号......
  • const与指针的四种关系
     定义变量inta=1;constintb=2; 1.将 普通变量地址 赋给 普通指针:int*p1=a;  // 正确 2.将 const变量地址 赋给 普通指针:int*p2=b; // 错误//p2是普通指针,意味着可以通过p2修改b的值,而b为const,不可修改,造成权限冲突//如果一......
  • 常量指针和指针常量的区别
     定义变量inta=1;intb=2; 常量指针:顾名思义,指向常量的指针(apointertoconstint),不能通过该指针修改变量的值(不通过该指针仍然可以修改)constint*p1=&a; // *p1为const,即指针指向的值为const*p1+=1;  // 错误,试图通过p1修改a的值p1=&b;   ......