什么是 C++ 中的智能指针?有哪些类型的智能指针?

server/2024/11/23 7:08:51/

        C++ 中不像 java 自带垃圾回收机制,必须释放掉分配的内存,否则就会造成内存泄漏。因此 C++11 引入了智能指针。智能指针是存储指向动态分配(堆)对象指针的类,用于生存期的控制,能够确保在离开指针所在作用域时,自动的销毁分配的对象,防止内存泄漏。智能指针的核心实现技术是引用技术,没使用它一次内部引用计数加 1,每析构一次内部引用计数减 1,减为 0 时,删除原始指针指向的堆区内存,使用智能指针需要引用头文件<memory>。

智能指针有:

  •         std::shared_ptr:共享的智能指针:使用引用计数机制来管理所指向的资源。每当一个新的std::shared_ptr 指向同一资源时,引用计数就会增加;当一个 std::shared_ptr 被销毁或重新指向其他资源时,引用计数就会减少。当引用计数变为零时,资源会被自动释放。
  •         std::unique_ptr:独占的智能指针:是一种独占所有权的智能指针,它保证在任何时刻只有一个
  •         std::weak_ptr:弱引用的智能指针:是一种弱引用智能指针,它不参与资源的所有权管理,也不会增加资源的引用计数。主要用于解决循环引用问题,通常与 std::shared_ptr 一起使用。它可以观察由 std::shared_ptr 管理的资源,但不会阻止资源的释放。

        


http://www.ppmy.cn/server/144208.html

相关文章

YashanDB:自主原创、行稳致远

本文为“2024国产数据库创新大会”深算院首席技术官兼崖山科技总裁陈志标的演讲实录分享&#xff0c;主题为《自主原创、行稳致远》&#xff0c;欢迎阅读。 金融行业面临自主可控与业务创新双重挑战 我们正处在百年未有之大变局中&#xff0c;中国的科技以前所未有的速度登上国…

webrtc支持h265

Webrtc播放H265的技术探索(datachannelwasm) - 飞翔天空energy - 博客园 https://github.com/ZLMediaKit/ZLMediaKit/issues/3589 [技术咨询]addStreamProxy 添加拉流代理之后&#xff0c;webrtc协议无法播放&#xff0c;其它协议正常 Issue #1808 ZLMediaKit/ZLMediaKit G…

Rust derive macro(Rust #[derive])Rust派生宏

参考文章&#xff1a;附录 D&#xff1a;派生特征 trait 文章目录 Rust 中的派生宏 #[derive]基础使用示例&#xff1a;派生 Debug 派生其他常用特征示例&#xff1a;派生 Clone 和 Copy 派生宏的限制和自定义派生自定义派生宏上面代码运行时报错了&#xff0c;以下是解释 结论…

Oracle与MySQL中CONCAT()函数的使用差异

一、CONCAT函数介绍 CONCAT函数是MySQL等数据库中用于连接两个或多个字符串的内置函数。其基本语法如下&#xff1a; CONCAT(string1, string2, ...)参数说明&#xff1a; string1, string2, …&#xff1a;需要连接的字符串参数&#xff0c;可以有多个。 返回值&#xff1…

Vue 3 中 onUnload 和 onPageScroll 使用详解

Vue 3 中 onUnload 和 onPageScroll 使用详解 在 Vue 3 中&#xff0c;当我们开发微信小程序时&#xff0c;通常需要处理页面生命周期事件和页面滚动事件&#xff0c;比如页面卸载 (onUnload) 和页面滚动 (onPageScroll) 等。这些功能对优化用户体验、实现动态效果以及处理页面…

ubuntu16.04-在ros中使用turtlesim功能包,使用rqt_graph查看小海龟和摄像头的ros网络情况

该博客基于以往小海龟和usb摄像头配置后的。可以参考我的小海龟和USB摄像头博客 rqt_graph是用图形表示当前活动中的节点与在ROS网络上传输的消息之间的相关性的工具。这对了解当前ROS网络情况非常有用. 安装rqt kinetic&#xff1a; 输入如下命令 sudo apt-get install ros-m…

使用Electron将vue2项目打包为桌面exe安装包

目录 一、下载electron模板项目 【electron-quick-start】​ 二、打开项目&#xff0c;安装所有依赖 三、在打exe包的时候报错是因为没有&#xff0c;需要检查并安装之后重新打包&#xff1b; 四、经过这么疯狂的一波操作之后&#xff0c;就可以打包出你想要的exe安装包&am…

关于Redux的学习(包括Redux-toolkit中间件)

目录 什么是 Redux &#xff1f; 我为什么要用 Redux &#xff1f; 我什么时候应该用 Redux &#xff1f; Redux 库和工具 React-Redux Redux Toolkit Redux DevTools 拓展 一个redux小示例 代码示例(很有用)&#xff1a; Redux 术语 Actions Reducers Store Dis…