C++11:智能指针

news/2024/11/6 14:28:08/

目录

1、智能指针含义

2、智能指针的分类


1、智能指针含义

(1)C++智能指针是一种用于管理动态内存的指针,可以自动进行内存管理,避免了手动管理内存所带来的问题。

(2)智能指针的核心思想是资源分配即初始化(RAII),即在对象的构造函数中进行资源分配,在对象的析构函数中进行资源释放。智能指针通过重载指针操作符和析构函数来实现资源的自动释放,从而避免了内存泄漏和野指针的问题。

2、智能指针的分类

C++中的智能指针主要有以下几种:

(1)unique_ptr:独占式智能指针,只能有一个指针指向该对象,当指针被销毁时,对象也会被自动销毁。

使用方法:

std::unique_ptr<int> p(new int(42)); // 创建一个unique_ptr,指向int类型的动态内存,初始值为42
std::cout << *p << std::endl; // 输出42
*p = 100; // 修改动态内存中的值
std::cout << *p << std::endl; // 输出100

(2)shared_ptr

shared_ptr是一种共享式智能指针,即多个shared_ptr可以共同拥有同一个内存资源。每个shared_ptr内部有一个计数器,记录有多少个shared_ptr指向同一个内存资源,当计数器为0时,内存资源被自动释放。

使用方法:

std::shared_ptr<int> p1(new int(42)); // 创建一个shared_ptr,指向int类型的动态内存,初始值为42
std::shared_ptr<int> p2 = p1; // p2和p1共享同一个内存资源
std::cout << *p1 << " " << *p2 << std::endl; // 输出42 42
*p1 = 100; // 修改动态内存中的值
std::cout << *p1 << " " << *p2 << std::endl; // 输出100 100

(3)weak_ptr:弱引用智能指针,它指向一个shared_ptr所管理的内存资源,但是不会增加内存资源的引用计数。当所指向的内存资源被释放时,weak_ptr会自动变成空指针。是shared_ptr的一种补充,可以解决shared_ptr的循环引用问题,但是不能直接访问对象,需要先将其转换为shared_ptr。

使用方法:

std::shared_ptr<int> p(new int(42)); // 创建一个shared_ptr,指向int类型的动态内存,初始值为42
std::weak_ptr<int> wp = p; // 创建一个weak_ptr,指向p所管理的内存资源
std::cout << *wp.lock() << std::endl; // 输出42,使用lock()函数获取weak_ptr指向的内存资源的shared_ptr
p.reset(); // 释放p所管理的内存资源
if(wp.expired()) // 判断wp是否为空指针std::cout << "wp is null" << std::endl; // 输出wp is null

总结:

智能指针是C++11中新增的重要特性,它可以有效地避免内存泄漏和空指针问题,提高代码的安全性、程序的健壮性和可维护性。在实际开发中,应该根据具体的场景选择不同类型的智能指针,合理地管理动态内存。

注意:智能指针并不能完全取代手动管理内存,对于一些特殊场景仍需要手动管理内存。


http://www.ppmy.cn/news/169284.html

相关文章

IP地址、子网划分

目录 一、IP地址1.IP地址表示2.分类IP地址3.无分类编址 CIDR4.特殊IP地址 二、子网划分1.子网、子网掩码、子网划分VLSM2.网络地址、广播地址3.示例1&#xff1a;等分为两个子网3.1 划分前&#xff1a;3.2 划分后&#xff1a; 4.示例2&#xff1a;等分为四个子网3.1 划分前&…

Arthas 的简单使用

安装 Arthas 根据操作系统&#xff0c;从Arthas 官方 GitHub 仓库下载相应的 Arthas 安装包。 执行 Arthas 打开命令行工具&#xff0c;进入 Arthas 安装目录并执行以下命令&#xff1a; java -jar arthas-boot.jar 在启动时&#xff0c;Arthas 会自动检测到本机上所有运行…

2021年全球与中国净水器行业市场规模及发展前景分析

2021年全球与中国净水器行业市场规模及发展前景分析 本报告研究全球与中国市场净水器的发展现状及未来发展趋势&#xff0c;分别从生产和消费的角度分析净水器的主要生产地区、主要消费地区以及主要的生产商。重点分析全球与中国市场的主要厂商产品特点、产品规格、不同规格产品…

反渗透、超滤和电渗析技术的区别

净水器的品牌系列比较多&#xff0c;大多采用两种过滤技术&#xff0c;即反渗透和超滤&#xff0c;所以&#xff0c;净水器产品也按技术分为两类&#xff0c;其一是以RO反渗透净水器为代表的纯净水机&#xff0c;另一种是以超滤机为代表的超滤净水机。 反渗透 反渗透&#xf…

小米净水器更换滤芯步骤和水龙头亮黄灯的解决办法

【开篇序言】 众所周知&#xff0c;无论何种品牌的净水器&#xff0c;滤芯都是有一定使用寿命的&#xff0c;而不是一次性安装可永久使用&#xff0c;如果遇到无需换滤芯这类宣布&#xff0c;请远离&#xff0c;不靠谱。换滤芯&#xff0c;小米净水器也不例外&#xff0c;小米…

小米净水器更换php教程,小米净水器如何更换滤芯 小米净水器怎么连接手机

受环境污染的影响&#xff0c;现在的水质也是逐渐变差&#xff0c;未经过净化的水&#xff0c;很多都是无法直接饮用的&#xff0c;因此越来越多的家庭选择在家里安装上净水器&#xff0c;确保饮用水的安全。小米净水器在众多品牌中脱颖而出&#xff0c;那小米净水器如何更换滤…

坑人的小米净水器: 漏水, 废水堵塞, 费用陷阱

出于对小米的好感, 当时看这个净水器外观也不错, 在无桶的产品里面也算便宜的(其他400g无桶的基本在2500左右), 虽说滤芯不便宜(各级滤芯都是30~80元不等, RO膜499), 但是也还可以接受, 就选了小米. 买的是厨下式的, 2017年9月装修好之后才开始用, 刚开始用时还比较正常, 废水:…

小米净水器

你好关于滤芯方面&#xff0c;最细的PP棉滤芯售价59元&#xff0c;3到6个月更换&#xff1b;两个活性炭滤芯单价69元&#xff0c;6个月到1年更换&#xff1b;RO反渗透滤芯售499元&#xff0c;两年换一次。