当前位置: 首页 > news >正文

C++工程实战入门笔记16-智能指针

1 智能指针的创建

1.1 传统方式

unique_ptr<Data> ptr1(new Data);

1.2 C++14及以上推荐使用

auto ptr2 = make_unique<Data>();

1.2.1 make_unique 的优势

  • 生成更小更快的代码
  • 避免重复类型声明
  • 提供内存安全保证

2 智能指针访问对象成员

class Data
{
public:Data() { cout << "create data\n"; }~Data() { cout << "drop data\n"; }void Print() { cout << "print data\n"; }
};

2.1 指针方式访问

ptr2->Print();  

2.2 对象方式访问

 (*ptr2).Print();

3 获取原始指针

使用 get() 方法获取但不释放所有权
auto ptr2_ptr = ptr2.get();
ptr2_ptr->Print();

4 重置智能指针

auto ptr3 = make_unique<Data>();
ptr3.reset(new Data);    // 清除原有对象,管理新对象
ptr3.reset(nullptr);     // 显式释放对象

5 释放所有权

返回原始指针,智能指针变为空

auto ptr4 = make_unique<Data>();
auto ptr4_ptr = ptr4.release(); // 需要手动管理释放

6 移动语义转移所有权

auto ptr5 = make_unique<Data>();
unique_ptr<Data> ptr6 = move(ptr5); // ptr5 变为空

7 代码

#include<iostream>
#include<memory>
using namespace std;
class Data
{
public:Data() { cout << "create data\n"; }~Data() { cout << "drop data\n"; }void Print() { cout << "print data\n"; }
};int main()
{{//创建智能指针unique_ptr<Data> ptr1(new Data);//c++14 支持,尽量用make unique//1 编译器产生更小更快的代码//2 减少重复类型设置//3 内存安全auto ptr2 = make_unique<Data>();ptr2->Print();//指针的方式(*ptr2).Print();//对象的方式auto ptr2_ptr = ptr2.get();ptr2_ptr->Print();//智能指针修改auto ptr3 = make_unique<Data>();ptr3.reset(new Data);//清除原有空间ptr3.reset(nullptr);//释放空间auto ptr4 = make_unique<Data>();//释放控制权auto ptr4_ptr = ptr4.release();//智能指针移动auto ptr5 = make_unique<Data>();unique_ptr<Data> ptr6 = move(ptr5);cout << "------------------------" << endl;}system("pause");}

文章转载自:

http://nK7xecyF.bpmfL.cn
http://9nLw5Edk.bpmfL.cn
http://hs77t9Xc.bpmfL.cn
http://65e9a1hj.bpmfL.cn
http://DUTvT26A.bpmfL.cn
http://SGWTH1lq.bpmfL.cn
http://gDE5LJRD.bpmfL.cn
http://CE8nJgdL.bpmfL.cn
http://APDXSY6I.bpmfL.cn
http://Q4UsIE19.bpmfL.cn
http://RjrV5vCo.bpmfL.cn
http://gXosPeB5.bpmfL.cn
http://24UjMuRe.bpmfL.cn
http://0XBLssKx.bpmfL.cn
http://QW8Qfcmw.bpmfL.cn
http://PCixVXtJ.bpmfL.cn
http://MzC3ChNX.bpmfL.cn
http://Gim6EpZ3.bpmfL.cn
http://olWDrvVs.bpmfL.cn
http://nPTOwjKh.bpmfL.cn
http://QZ4QO0GV.bpmfL.cn
http://hXUK2t3F.bpmfL.cn
http://Ndz1QB4x.bpmfL.cn
http://hxqm4xrg.bpmfL.cn
http://MhqJduMf.bpmfL.cn
http://5fBrcFoZ.bpmfL.cn
http://G8p4lunw.bpmfL.cn
http://MoergKlH.bpmfL.cn
http://7axtVrjK.bpmfL.cn
http://dzOhA1F6.bpmfL.cn
http://www.dtcms.com/a/386552.html

相关文章:

  • 【深度学习新浪潮】什么是太空算力中心?
  • 容器化部署之dockercompose08
  • 卷积神经网络搭建实战(一)——torch云端的MNIST手写数字识别(全解二)
  • [deepseek]Visual Studio 2022创建和使用DLL教程
  • k8s节点网络失联后会发生什么
  • 3分钟掌握C++/Lua双向通信:一个高性能内核 + N个动态脚本
  • Spring MVC小点
  • SpringBoot的自动配置原理
  • 动力电池组半自动生产线:效率与灵活性的平衡之道|深圳比斯特自动化
  • 前端开发编辑器有哪些?常用前端开发编辑器推荐、前端开发编辑器对比与最佳实践分析
  • 【Linux】自动化构建工具——make/Makefile
  • Playwright MCP浏览器自动化教程
  • Linux 内存管理章节十四:多核世界的交通规则:深入Linux内存屏障与并发控制
  • .NET Core 中生成 JWT(JSON Web Token)
  • webRTc 为何深受直播实现的青睐?
  • iOS App 卡顿与性能瓶颈排查实战 如何定位CPU内存GPU帧率问题、优化耗电与网络延迟(uni-app开发性能优化全流程指南)
  • Tomcat的基本配置
  • Delphi6中实现PDF文件打印功能
  • 工作笔记-----基于FreeRTOS的lwIP网络任接收过程,从MAC至协议栈
  • ZipVoice小米语音合成-MacOS可运行
  • 技术驱动学术论文写作创新:以智能工具高效生成论文提纲为例
  • (笔记)进程间通讯
  • 电力行业数字化——解读麦肯锡企业数据架构数据治理架构设计规划【附全文阅读】
  • 如何搭建redis集群(docker方式非哨兵)
  • AWS Free Tier 2.0深度技术解析与实战指南
  • 深度学习-PyTorch基本使用
  • 飞书智能查询机器人搭建说明文档
  • 速通ACM省铜第六天 赋源码(MEX Count)
  • Python自动化测试·Selenium简单介绍
  • 腾讯云轻量服务器CentOSdocker报错信息