尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
auto_ptr(C++98,已废弃)unique_ptr/shared_ptr自定义实现
目录代码完整分析(std::auto_ptr,C++98,已废弃)执行流程如果没有崩溃(注释掉p2.get()-showInfo();),完整打印输出:核心考点 auto_ptrunique_ptr 对比(正确写法)原代码现象总结自定义实现 auto_ptrauto_ptr 的致命缺陷(为什么被废弃)auto_ptr /unique_ptr 对比表三套智能指针完整总结自定义实现 unique_ptr运行输出关键要点对比拓展自定义 shared_ptr(最简版,模仿 std::shared_ptr 核心原理)运行输出std::shared_ptr 还具备的扩展点(可以继续扩展)C++ 智能指针完整对比速查表代码完整分析(std::auto_ptr,C++98,已废弃)关键点:auto_ptr拷贝构造会转移所有权,拷贝之后原智能指针变成空(内部裸指针置 nullptr)。完整代码:#include iostream #include memory // auto_ptr头文件 using namespace std; class A { int Id; public: A(int id):Id(id) { cout "A的构造函数" endl; } ~A() { cout "A的析构函数" endl; } void showInfo() { cout this-Id endl; } }; int main() { auto_ptrA p2(new A(888)); p2.get()-showInfo(); auto_ptrA p3(p2); //拷贝构造:所有权从p2转移给p3,p2内部指针置空! p3.get()-showInfo(); p2.get()-showInfo();// // p2.get()是空指针!p2.get()-showInfo(); 空指针解引用,程序崩溃! return 0; }执行流程new A(888)→ 输出:A的构造函数,堆上创建 A 对象 Id=888。p2.get()-showInfo():p2 持有对象,输出:888。auto_ptrA p3(p2);拷贝构造,所有权转移,p2内部裸指针被置为NULL;p3接管堆对象。p3.get()-showInfo():p3 有效,输出:888。p2.get()-showInfo();:p2.get()返回空指针,空指针 - 调用成员函数,运行时崩溃(段错误),后面代码不再执行。main 函数退出,局部对象析构:p3 析构,delete 堆对象,打印A的析构函数;p2 析构,内部是空指针,什么都不做。如果没有崩溃(注释掉p2.get()-showInfo();),完整打印输出:plaintextA的构造函数 888 888 A的析构函数核心考点 auto_ptrauto_ptr拷贝构造不是浅拷贝共享资源,是所有权转移;拷贝后源对象变为空。拷贝之后再使用原智能指针p2,get()得到空指针,解引用直接崩溃。C++11 已经废弃auto_ptr,推荐使用std::unique_ptr,unique_ptr直接禁止拷贝,只能移动std::move。unique_ptr 对比(正确写法)unique_ptrA p2(new A(888)); // unique_ptrA p3(p2); //编译直接报错,禁止拷贝 unique_ptrA p3 = std::move(p2); //移动语义,转移所有权面试常考:auto_ptr的缺陷:支持拷贝,拷贝转移所有权,容易造成原指针悬空,引发空指针崩溃,所以被废弃。原代码现象总结打印:A的构造函数 888 888然后程序直接崩溃,不会打印析构函数。因为p2.get()-showInfo()空指针解引用,程序直接终止,main 没有正常走完,p3/p2 的析构都没机会执行。补充:如果把崩溃那行注释掉,main 正常结束输出:A的构造函数 888 888 A的析构函数自定义实现auto_ptr背景:std::auto_ptr是 C++98 的老式智能指针,C++11 已经废弃,C++17 移除,被unique_ptr替代。 核心特点:独占所有权;拷贝构造 / 拷贝赋值会转移所有权!原指针被置空(这是它最大坑,容易踩坑);没有移动语义(C++98 没有 右值引用);析构delete裸指针;提供get()、release()、reset()接口。重点坑:auto_ptr的拷贝不是复制,是抢夺资源。auto_ptrA p1(new A(1)); auto_ptrA p2 = p1; // p1被置null,所有权转移到p2,p1失效! // 后续再使用 p1-xxx 直接崩溃完整实现代码:#include iostream using namespace std; //测试类 class A { int id; public: A(int i):id(i) { cout "A构造A析构id = " id endl; } }; templateclass T class MyAutoPtr { private: T* m_ptr; public: //构造 explicit MyAutoPtr(T* p = nullptr) : m_ptr(p) { } // ---------------- 重点:拷贝构造,会转移所有权! ---------------- MyAutoPtr(MyAutoPtr other) { //抢夺对方资源,other置空 m_ptr = other.release(); } // ---------------- 拷贝赋值,同样转移所有权 ---------------- MyAutoPtr operator=(MyAutoPtr other) { if(this ==
RELATED

相关推荐

MathType 安装与 Office 集成全攻略:从环境检查到故障排查

MathType 安装与 Office 集成全攻略:从环境检查到故障排查

在学术写作、技术文档或教学材料中,数学公式的规范呈现是专业性的重要体现。无论是撰写一篇包含复杂推导的论文,还是制作一份需要展示公式的演示文稿,一个强大且易用的公式编辑器都不可或缺。MathType 作为一款功能全面的数学公式编辑工具&am…

📅 2026/9/27 11:27:56
FastAPI实战:从零构建高性能Python API,避坑指南与最佳实践

FastAPI实战:从零构建高性能Python API,避坑指南与最佳实践

如果你正在寻找一个能快速构建高性能 API 的 Python 框架,并且厌倦了 Flask 的“慢”和 Django 的“重”,那么 FastAPI 很可能就是你一直在等的那个答案。但网上教程千千万,为什么还要看这篇?因为很多教程只告诉你“怎么用”&…

📅 2026/8/25 16:43:51
强化学习智能体关键点感知自反馈重试机制:原理、实现与调优

强化学习智能体关键点感知自反馈重试机制:原理、实现与调优

1. 项目概述:当智能体学会“复盘”与“重试”最近在折腾强化学习项目时,我总被一个问题困扰:智能体(Agent)在复杂环境里探索,一旦在某个关键决策点(Pivotal Point)走错一步&#xff…

📅 2026/8/27 3:57:55
MORE NEWS

更多资讯

📰

Java图书馆管理系统开发实战与架构设计

1. 项目概述图书馆管理系统是高校信息化建设中的基础工程,也是计算机专业学生常见的毕业设计选题。这个基于Java开发的系统不仅包含常规的图书借还功能,还整合了远程调试支持与完整文档体系,特别适合作为教学案例或中小型图书馆的实际应用方案…

📰

微信消息队列积压问题与动态扩容实战解析

1. 微信消息队列积压问题的本质与挑战微信作为国民级即时通讯应用,每天承载着数百亿级别的消息交互。当系统遇到突发流量或资源瓶颈时,消息队列积压就像高速公路上的连环追尾事故——前端请求源源不断涌入,后端处理能力却跟不上节奏。我在201…

📰

思科Catalyst 9800无线控制器配置实战:从对象模型到HA高可用

简介:这份手册面向网络工程师与无线运维人员,系统讲解思科Catalyst 9800-40无线控制器的实战配置方法,帮助读者掌握从硬件认知到业务配置的完整流程。内容涵盖设备技术规格与性能指标、指示灯与接口说明、WLAN/策略/RF/AP Join/Flex等配置逻辑…

📰

ASP汽车门户网站系统:IIS+Access/SQL Server完整部署指南

简介:这是一套基于ASP开发的汽车门户网站系统源码,面向Web开发初学者与中小型垂直行业网站搭建者,提供完整的汽车类垂直门户解决方案。系统涵盖新车报价、二手车交易、维修保养、汽车租赁、资讯发布等核心频道,并支持商户与个人双…

📰

从 Visual Studio 到 IIS:.NET WebApi 发布与端口开放实战指南

简介:这份资源面向需要在 Windows 服务器上部署 .NET WebApi 的开发者与运维人员,聚焦 IIS 环境搭建与端口开放这一常见但易踩坑的环节。内容以图文步骤形式梳理了从服务器管理器添加角色和功能、勾选 Web 服务器(IIS)、补全 .NET Framework 3.5 与 4.5 …

📰

DS5100B管理口打不开与Zone不生效排错:JRE、CLI与端口灯语

简介:《EMC DS5100B光纤交换机使用维护手册》面向数据中心与企业网络运维人员,以及需要管理SAN光纤交换设备的初、中级技术人员,聚焦设备日常操作、Zone配置与故障诊断。资源包仅含1个docx文档,压缩包约392KB,篇幅集中…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬