C++98 auto_ptr智能指针

news2024/11/26 9:36:07

auto_ptr 是C++98定义的智能指针模板,其定义了管理指针的对象,可以将new获得(直接或间接)的地址赋给这种对象.当对象过期时,其析构函数将使用delete来释放内存!

用法:

头文件: #include<memory>

用法: auto_ptr <类型> 变量名(new 类型);

#include<iostream>
#include<memory>

using namespace std;

class test {
public:
	test() {
		cout << "调用构造函数" << endl;
	}
	~test() {
		cout << "调用析构函数" << endl;
	}
};
int main(void) {

	// 语法:
	// auto_ptr<类型> 变量名(new 类型);

	 //test* t = new test();//普通用法 不能自己析构
	auto_ptr<test>t(new test());

	return 0;
}

运行结果:

get : 获取指针

// get : 获取指针
cout << t.get() << endl;
test* temp = t.get();

release : 取消智能指针对动态内存的托管,此时内存必须由程序员手动释放 

auto_ptr<test>t(new test());

// release : 取消智能指针对动态内存的托管,此时内存必须由程序员手动释放
test* temp = t.release();
delete temp;

reset : 重置智能指针托管的动态内存,如果地址不一致,原来的地址会被释放

(1)无参 :释放当前对象

//test* t = new test();//普通用法 不能自己析构
auto_ptr<test>t(new test());

// reset : 重置智能指针托管的动态内存,如果地址不一致,原来的地址会被释放
t.reset();

结果:

(2)有参:释放原来的对象,重新托管新的对象

auto_ptr<test>t(new test());

// reset : 重置智能指针托管的动态内存,如果地址不一致,原来的地址会被释放
//t.reset();
t.reset(new test());

结果: 

 使用建议:

(1).尽可能不要将auto_ptr变量定义为全局变量或指针

(2).除非自己知道后果,不要把auto_ptr 智能指针赋值给同类型的另外一个智能指针

(3).C++11 后auto_ptr已经被"抛弃",已使用unique_ptr代替!

auto_ptr 被C++11抛弃的主要原因: 

    //auto_ptr 被C++11抛弃的主要原因:
	auto_ptr<string>s1(new string("ABC"));
	auto_ptr<string>s2(new string("abc"));
	cout << "s1: " << s1.get() << endl;
	cout << "s2: " << s2.get() << endl;
	cout << "s1=s2" << endl;
	s1 = s2;
	cout << "s1: " << s1.get() << endl;
	cout << "s2: " << s2.get() << endl;

将智能指针s2赋值给s1,首先s1会释放,将s2赋值给s1,同时也会s2释放

结果:

auto_ptr陷阱,不能将同一段内存交给多个智能指针同时管理!!!(适用于所有智能指针)

    //auto_ptr陷阱,不能将同一段内存交给多个智能指针同时管理
	string* s = new string("智能指针的内存管理陷阱");
	{
		auto_ptr<string>s2;
		s2.reset(s);
		{
			auto_ptr<string>s1;
			s1.reset(s);
			cout << "s: " << *s1 << endl;
		}
		cout << "s: " << *s2 << endl;
	}

结果:s1和s2同时管理s,当s被s1释放后,s2将无法访问s,编译不会报错,运行时崩溃.

不建议使用auto_ptr的原因以及auto_ptr的弊端:

因此:C++11 使用了更加严谨的unique_ptr替代了auto_ptr 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/460648.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

算力为基,生态谋远,英特尔商用客户端的三重创新进化

“混合办公”仍旧是2023年全球企业IT管理者与“打工人”共同关注的热点话题。 比如根据携程最新公布的数据&#xff0c;过去一年内有超过66%的员工申请了混合办公对比试运行阶段&#xff0c;管理者对混合办公的支持率提升了10%。超九成管理者认为混合办公对效率无影响。调研数…

gpt人工智能模型原理-GPT的特点和基本原理

gpt训练模型 GPT&#xff08;Generative Pre-trained Transformer&#xff09;是指一类以Transformer网络为基础的语言模型&#xff0c;可以用于自然语言生成、问答、文本分类等多个NLP任务。GPT的训练是基于预训练&#xff08;pre-training&#xff09;的方式进行的&#xff…

Java中读取用户输入的是谁?Scanner类

目录 前言一、Scanner类二、Scanner类基本使用1. 基本使用2. nextLine()方法 前言 我们在初学 Java 编程的时候&#xff0c;总是感觉很枯燥乏味&#xff0c;想着做点可以交互的小系统&#xff0c;可以让用户自由输入&#xff0c;系统可以接收做出反映。这就要介绍一下 Java 中的…

【数据库】表的增删改查(基础 )

目录 1、新增/插入数据 1.1、给表中所有字段插入数据 1.1、给表中指定字段&#xff08;列&#xff09;插入数据 1.2、一次插入多条记录 1.3、时间日期数据的插入 1.3.1、手动插入某个时间 1.3.2、插入当前时刻的时间 2、查找操作 2.1、全列查找&#xff08;查找表的…

【ArcGIS Pro二次开发】(24):现状、规划用地图斑的变化检查

如题如见&#xff0c;这是一个检查现状、规划用地变化的工具。 通过此工具&#xff0c;可以生成变化图斑&#xff0c;检查规划中发生的变化&#xff0c;明确是正常的规划措施&#xff0c;还是因为误操作产生的图斑变化。 一、要实现的功能 如上图所示&#xff0c;点击【检查现状…

【Daily Share】没有域名怎么破?手把手教你如何通过hosts配置域名(假域名)

目录 ❌前言&#x1f4c4;hosts文件&#x1f989;DNS解析步骤&#x1f44c;配置伪域名第一步 修改本机hosts配置第二步 配置服务器nginx &#x1f503;流程图 ❌前言 ip记不住&#xff1f;&#xff1f;&#xff1f; 域名不想买&#xff1f;&#xff1f;&#xff1f; 每次当我…

系统分析师《企业信息化战略与实施》高频知识点

企业信息化战略与实施---企业信息化与电子商务 业务流程重组&#xff08;Business Process Reengineering BPR&#xff09;是针对企业业务流程的基本问题进行反思&#xff0c;并对它进行彻底的重新设计&#xff0c;使业绩取得显著性提高。与目标管理、全面质量管理、战略管理等…

桂林阳朔4天4夜旅游攻略-亲测整理踩坑版本

桂林阳朔4天4夜旅游攻略-亲测整理踩坑版本 前言我的行程上海飞机出发到达两江机场桂林第一家酒店第一天早饭桂林米粉正宗吃法坐大巴去杨堤路口杨堤路口坐巴士直达杨堤码头杨堤到兴坪坐电动竹筏兴坪--20元背面打卡地兴坪古镇--汽车站阳朔酒店租电动车遇龙河漂流&#xff08;*五星…

Three.js教程:Face3对象定义Geometry的三角形面

推荐&#xff1a;将 NSDT场景编辑器 加入你的3D工具链 其他系列工具&#xff1a; NSDT简石数字孪生 Face3对象定义Geometry的三角形面 几何体Geometry的三角面属性geometry.faces和缓冲类型几何体BufferGeometry顶点索引属性BufferGeometry.index类似都是顶点位置数据的索引值…

【MySQL入门指南】MySQL中的数据类型总结

文章目录 MySQL数据类型一、数值类型1.类型总览2.BIT类型3.INT系列类型4.浮点数类型1)float与double2.float与decimal 二、字符串类型1.类型总览2.CHAR类型3.VARCHAR类型 三、日期与时间类型四、枚举类型1.enum类型2.set类型3.在set中的查找 MySQL数据类型 ​ MySQL中支持的数…

ONLYOFFICE协作空间是什么?

今天给大家带来一个好消息&#xff0c;ONLYOFFICE推出更安全的协作空间了&#xff0c;好多朋友看到这个标题不认识是什么&#xff0c;我也是&#xff0c;今天来给大家介绍一下。 什么是 ONLYOFFICE 协作空间 简单来说ONLYOFFICE协作空间是一个协同工作平台&#xff0c;帮助您更…

Unity3D:模拟器视图

推荐&#xff1a;将NSDT场景编辑器加入你的3D工具链 3D工具集&#xff1a;NSDT简石数字孪生 模拟器视图 “模拟器”视图在模拟的移动设备上显示应用程序。使用它来查看应用程序与该设备的屏幕形状、分辨率和方向的显示方式。 模拟器视图的屏幕截图 使用模拟器视图 若要打开…

微服务学习——Docker

初识Docker 项目部署的问题 大型项目组件较多&#xff0c;运行环境也较为复杂&#xff0c;部署时会碰到一些问题: 依赖关系复杂&#xff0c;容易出现兼容性问题开发、测试、生产环境有差异 Docker Docker如何解决依赖的兼容问题的? 将应用的Libs(函数库)、 Deps&#xf…

【软件测试】第1章 软件测试概述

系列文章目录 文章目录 系列文章目录前言第1章 软件测试概述1.1 软件、软件危机和软件工程1.1.1 基本概念1.1.2 软件工程的目标及其一般开发过程1.1.3 软件过程模型 1.2 软件缺陷与软件故障1.2.1 基本概念1.2.2 典型案例 1.3 软件测试的概念1.3.1 软件测试的定义1.3.2 软件测试…

2023全球运维大会 | 智能运维中的数据管理和数据探索

GOPS 全球运维大会由高效运维社区&#xff08;GreatOPS&#xff09;、开放运维联盟&#xff08;OOPSA&#xff09;和 DevOps 时代社区联合主办&#xff0c;指导单位为云计算开源产业联盟、FinOps产业推进方阵。迄今为止&#xff0c;GOPS 已经举行了十九次&#xff0c;大会参会嘉…

Docker网络与资源控制

目录 一、Docker网络 1.Docker网络模式 2.Docker网络实现的原理 3.映射端口 4.none模式 5.bridge模式 二、资源控制 1&#xff0e;CPU 资源控制 2.cgroups有四大功能&#xff1a; 一、Docker网络 1.Docker网络模式 ●Host&#xff1a;容器将不会虚拟出自己的网卡&am…

如何保护数据安全?企业该从部署SSL证书开始

数字化时代&#xff0c;大数据开始蔓延到各行各业&#xff0c;影响着生活的方方面面。在犹如“皇帝穿新衣”般透明的大数据时代&#xff0c;数据泄露无孔不入&#xff0c;存在问题层出不穷&#xff0c;未知的漏洞隐患、安全边界的模糊、新的网络攻击手段、个人隐私的无处藏身等…

音视频开发面试题大盘点:掌握这些基础知识,你就能轻松应对面试

前言 音视频开发作为一种高技术含量的领域&#xff0c;随着人们对数字媒体的需求不断增加&#xff0c;其前景非常广阔。预计在2023年&#xff0c;音视频开发领域仍将继续保持快速发展的态势&#xff0c;尤其是在移动互联网、物联网、虚拟现实、增强现实等领域。 根据BOSS招聘…

deepstream6.2更新的新特性-支持雷达lidar的推理检测

1,其实在deepstream6.1中已经加入了3D深度图像 其实在deepstream6.1中已经加入了3D深度图像,可以将深度图像的数据显示出来,但是需要专门的深度相机,官方给出的是Intel realSense D435相机,它可以读取相机数据,并进行点云显示以及渲染深度绘制,这个功能有点类似调用ope…

ES集群配置

一、高并发下如何保证读写一致 1.1 写操作 对于写操作&#xff0c;一致性级别支持 quorum/one/all&#xff0c;默认为 quorum&#xff0c;即只有当大多数分片可用时才允许写操作。但即使大多数可用&#xff0c;也可能存在因为网络等原因导致写入副本失败&#xff0c;这样该副本…