重载全局new和delete

2023-05-16

程序代码

如下所示:

#include<cstdio>
#include<cstdlib>

using namespace std;

void* operator new(size_t sz)  //sz由编译器传入
{
	printf("operator new: %d Bytes\n", sz);
	void* m = malloc(sz);
	if (!m)
		puts("out of memory");
	return m;
}

void operator delete(void* m)
{
	puts("operator delete");
	free(m);
}

class S
{
	int i[100];
public:
	S(){ puts("S::S()"); }
	~S(){ puts("S::~S()"); }
};

int main()
{
	puts("Creating & destroying an int");
	int* p = new int(47);
	delete p;
	puts("Creating & destroying an S");
	S* s = new S;
	delete s;
	puts("Creating & destroying S[3]");
	S* sa = new S[3];
	delete[]sa;
	return 0;
}

输出结果

在这里插入图片描述

分析

可得如下几点:

  1. 动态分配内存与收回的过程为:operator new()接收编译器传入的长度参数size_t sz并分配内存→调用创建对象的构造函数→调用对象的析构函数→operator delete()接收析构函数传入的void*参数,执行内存释放,返回void。
  2. 本程序中未用iostream中的cin等,是为了防止创建一个iostream对象是,它们去调用new分配内存,造成死锁。
  3. 在创建类型为S的数组时,从所需要的字节数目中可以看到,额外的内存被分配用于存放它所包含的对象数量的信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重载全局new和delete 的相关文章

  • 1. 两数之和【return new int[]{i, j}、hashtable.containsKey()、get、put】

    1 两数之和 给定一个整数数组 nums 和一个整数目标值 target xff0c 请你在该数组中找出 和为目标值 target 的那 两个 整数 xff0c 并返回它们的数组下标 你可以假设每种输入只会对应一个答案 但是 xff0c 数
  • HTTP 请求方法 GET/POST/PUT/DELETE

    Web HTTP基础知识 HTTP请求是什么 xff1f HTTP超文本传输协议 xff0c 是确保服务器 xff08 Server xff09 和客户端 xff08 Client xff09 之间的正确通信 一个请求和响应的过程 xff1
  • Java—内部类

    It s possible to please a class definition within another class definition 内部类即定义在另一个类的内部的类 When you create an inner cla
  • 多表可更新视图的实现

    多表关联后的数据能保证主键唯一的视图是可直接做更新 不需要用触发器实现 多表视图的定义 当视图的数据源只有一张数据表 则该视图为单表视图 当视图的数据源是多张数据表 则该视图为多表视图 可更新视图的定义 在绝大多数人的概念中 视图是只读的
  • nafxcwd.lib和afxmem.obj的冲突

    gt Build started Project ReplaceOther Configuration Debug Win32 1 gt Linking 1 gt ImageTagInfo obj warning LNK4075 ignor
  • c++ new与delete与qt内存回收机制

    在c primer中读到 new 是在堆里面申请一段内存资源 new必须与delete成对使用 否则就会造成内存泄漏 可最近学qt 我经常可以看见只new而不delete的情况 是不是这样就内存溢出了 非也 百度了一下qt的内存管理机制 才
  • 私有构造函数

    通常我们都将构造函数的声明置于public区段 假如我们将其放入private区段中会发生什么样的后果 没错 我也知道这将会使构造函数成为私有的 这意味着什么 我们知道 当我们在程序中声明一个对象时 编译器为调用构造函数 如果有的话 而这个
  • 基数排序比快速排序快

    最近在关于算法的书籍 本以为以前看过的算法书都说快速排序是最好的排序算法 也没有想过 闲着无聊变写了一个关于基数排序的算法简单分析了一下应该时间复杂度比快速排序 小 于是编程实现果然结果要比快速排序 快 对两者都 1000000个数排序快速
  • 验证实例的有效性与类型的判断

    我们常常会用到指针变量 指针只有赋值以相应的实例才有意义 怎么判断指针引用实例的有效性是我们经常面对的一个问题 我现在 只知道两种方法 列举如下 1 ASSERT VALID pMyObject ASSERT VALID 要判断的类必须是C
  • C++深拷贝和浅拷贝

    C 深拷贝 浅拷贝 对于普通类型的对象来说 它们之间的复制是很简单的 例如 int a 88 int b a 而类对象与普通对象不同 类对象内部结构一般较为复杂 存在各种成员变量 下面看一个类对象拷贝的简单例子 include
  • 复制文件夹所有内容 和 删除整个文件夹的2个函数

    选择自 hycapril 的 Blog 实现一个静态方法将指定文件夹下面的所有内容copy到目标文件夹下面 如果目标文件夹为只读属性就会报错 April 18April2005 In STU public static void CopyD
  • js中new 到底做了瓦特??比较new、Object.create、Object.setPrototypeOf

    实例化的时候我们都是这样 var box new BOX 那么new在中间有什么作用呢 new 先创建一个新对象b new Object 将构造函数作用域赋给新变量 b proto BOX prototype 执行构造函数中的代码 属性 方
  • OpenBSD cvsup更新

    安装了 OpenBSD 后你会发现它很小个 只有500多M 当然里面只有ssh sendmail功能 dev wd0a 130M 38 8M 84 7M 31 dev wd0h 95 5G 16 0K 90 8G 0 home dev wd
  • 查询及删除重复记录

    查询及删除重复记录的方法大全 1 查找表中多余的重复记录 重复记录是根据单个字段 peopleId 来判断select from peoplewhere peopleId in select peopleId from people gro
  • Unicode下CString和char *之间的互相转换

    CString中存储的字符的数据类型为wchar t类型 一 CString转换为char 1 方法一 使用wcstombs include
  • PL/SQL程序设计_基本语法

    DECLARE V DATE DATE SYSDATE v var VARCHAR2 20 V VALID BOOLEAN BEGIN IF V VAR IS NULL THEN DBMS OUTPUT PUT LINE V VAR IS
  • ASCII码详解

    ASCII码表 ASCII码大致可以分作三部分組成 第一部分是 ASCII非打印控制字符 第二部分是 ASCII打印字符 第三部分是 扩展ASCII打印字符 第一部分 ASCII非打印控制字符表 ASCII表上的数字0 31分配给了控制字符
  • 快速删除系统服务命令 sc delete ServiceName

    快速删除系统服务命令 sc delete ServiceName 要删除名为ServiceName的服务 可以用XP自带服务管理工具 SCP sc exe命令用以下命令即可删除指定的服务 sc delete ServiceName这些命令的
  • MPI群通信与矩阵乘法的Fox算法实现

    原本以为 MPI天生只能在Linux上运行 但这次却发现了Intel MPI Library 这个好用的东西 基本不需要设置 安上之后 用自己能登录windows的帐号和密码注册就行了 虽然不是局域网上的机器 但也可以让我的双核CPU达到1
  • 拷贝构造函数和赋值构造函数声明为私有的作用

    转贴地址 http blog csdn net winer632 archive 2009 01 12 3762292 aspx 每个类只有一个赋值函数 由于并非所有的对象都会使用拷贝构造函数和赋值函数 程序员可能对这两个函数有些轻视 请先

随机推荐

  • 模型的并行推理

    ONNX模型可以通过使用深度学习框架的多卡并行化功能来实现GPU多卡推理 以PyTorch为例 xff0c 可以使用DataParallel或DistributedDataParallel来进行多卡并行化 DataParallel可以在单个
  • python队列

    q get 在队列为空时会阻塞 q put 在队列满时会阻塞 get nowait 在队列为空的时候也不阻塞 xff0c 这时候会抛异常queue Empty put nowait 1 在队列满的时候也不阻塞 xff0c 这时候会抛异常qu
  • python queue【队列的阻塞】

    队列的阻塞分为 xff1a 入队 put 时的阻塞 出队 get 时的阻塞 整体 join 的阻塞 消费的阻塞 出队阻塞 注 xff1a 设置 timeout 超时时间 xff0c 并捕捉 queue Empty 异常 xff1b 设置to
  • 微策略春招面试总结

    春季招聘时我报的研发岗 xff0c 由于我不是杭州本地人 xff0c 故首先接到的是电话面试 xff0c 电话面试大概一周左右被通知去杭州总部面试 下面主要简述一下面试的内容 第一面是技术面 xff0c 大概持续近一个小时 首先面试官会照着
  • Java JSONArray for循环 remove成员的一个好算法(转载)

    来源 xff1a https www cnblogs com xiaoliao p 10415214 html parameterArray 61 34 boundingBox 34 34 29 28 401 29 399 85 27 84
  • ExecutorService 关闭 and 如何判断线程池中任务执行完毕

    ExecutorService 关闭 1 shutdown 2 shutdownNow 3 awaitTermination 当你使用 ExecutorService的时候 xff0c 你应该记得关闭它 xff0c 这样这些被管理的线程才会
  • Ubuntu下启动图形界面startx报错connection to X server lost

    服务器被重启之后startx无法进入图形界面 xff0c 训练数据也全丢了 按以前应对这个问题的步骤重新走了一遍还是不行 就是各种网上找的杂七杂八的办法 xff0c 于是想起之前用x2go client登录图形界面ok的 xff0c 然后去
  • C语言环形队列缓冲-FIFO_RingBuffer

    ring buffer h span class token macro property span class token directive hash span span class token directive keyword if
  • [推荐]轻量好用学习python的工具--​-Thonny​

    青少儿编程教育的三大语言 xff0c 图形化编程 Python编程和C 43 43 语言编程 图形化语言 xff08 Scratch xff09 和C 43 43 语言 xff08 Dev C 43 43 xff09 的编程工具相对比较固定
  • Ubuntu 18.04无法打开屏幕共享,sharing按钮无法打开

    Ubuntu 18 04无法打开屏幕共享 xff0c sharing按钮无法打开 问题 xff1a 刚装了Ubuntu 18 04 xff0c 因新版的Ubuntu自带了屏幕共享的功能 xff0c 故尝试打开setting gt shari
  • 基于Web的高校社团管理系统的设计与实现

    该文章记录的是我的毕业设计 该项目运用PHP动态网站开发技术 xff0c 使用ThinkPHP5开源框架 xff0c HTML5 CSS JavaScript等脚本语言 xff0c Web服务器使用Apache xff0c 数据库采用MyS
  • qt在窗口中同步打印日志信息,根据日志级别设置日志颜色

    场景 一般我们会在程序运行的过程中配置对应的日志信息 xff0c 帮助我们了解当前程序执行的进度 当使用qt增加了操作界面时 xff0c 同样需要将日志信息在界面中显示出来 思路 使用qt的QtWidgets QTextEdit 控件作为日
  • pygame 学习笔记(4)推荐一本python入门游戏书籍《PYTHON游戏编程入门》

    简介 PYTHON游戏编程入门 xff08 More Python Programming for the Absolute Beginner xff09 是 S Harbour写的一本入门书籍 xff0c 基于pygame库 本书每一个章
  • MySQL相关知识点(原理、面试、工作)

    MySQL相关常识 返回导航页感谢您的宝贵时间 xff0c 来阅读本文知识点1 xff1a where 和having 原理功能快捷键启动 关闭MySQL服务如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一
  • 错排问题(排列组合习题)

    标题 xff1a 错排问题 题目描叙 xff1a 某人写了n封信和n个信封 如果所有的信都装错了信封 求所有的信都装错信封共有多少种不同情况 Input 输入n xff08 n lt 61 20 xff09 Output 输出情况总数 Sa
  • C++ 求素数的三种方法

    include lt iostream gt include lt cmath gt using namespace std 方法一 暴力搜索 void test01 for int i 61 2 i lt 101 i 43 43 for
  • 30个免费的CSS3动画片段代码

    对于网页设计师来说 xff0c 前端代码CSS HTML不是强项 xff0c 但有时候也是需要写的 特别是现在流行CSS3动画 xff0c 学习和了解一些相关知识是必须的 CSS3动画其实不算复杂 xff0c 比JS简单得多 xff0c 今
  • 麒麟系统开机自启动服务、执行脚本、命令

    rc local是一个较旧Linux启动加载脚本 目前主流系统主要用systemctl控制开机启动 xff0c 目前仍然可用 1 普通命令可以直接写在rc local里 xff0c xff08 rc local须有执行权限 xff0c 没有
  • 每天进步一点点之Android基础(3)—— Activity的onNewIntent

    onNewIntent 的触发时间 xff1a 如图所示 xff0c onCreate 和 onNewIntent 不会被同时调用 如果在 AndroidManifest xml 中 xff0c 将 Activity 的 launchMod
  • 重载全局new和delete

    程序代码 如下所示 xff1a span class token macro property span class token directive keyword include span span class token string