Cpp--重载全局的new和delete

2023-05-16

#include<iostream>
#include<process.h>
#include<string.h>
#include<stdio.h>
#define MAX_SIZE 30000
char MemArr[MAX_SIZE];
char *pMem=MemArr;

void *operator new(unsigned bytes){
	printf("myGlobal-operator-new!bytes=%d\n",bytes);
	if(pMem+bytes<=MemArr+MAX_SIZE){
		pMem+=bytes;
		return(void *)(pMem-bytes);
	}
	else
	{
		printf("My-new-fail!I only have %d bytes memory now!",MemArr+MAX_SIZE-pMem);
		printf("but you need %d bytes!\n",bytes);
		return NULL;
	}
}
void operator delete(void *pm){
	printf("myGlobal-operator-delete!\n");
	if((char*)pm>=MemArr&&(char*)pm<MemArr+MAX_SIZE)//介于之间
		pMem=(char*)pm;
}
void main(){
	char *pc=(char*)new char[MAX_SIZE];
	strcpy(pc,"abcde98765");
	printf("pc=>%s\n",pc);
	char *pc2 = (char *)new char[5];
	delete pc;
	int *pi=(int *)new int(560);
	printf("(*pi)=%d\n",*pi);
	double *pdA1 = (double *)new double[25];           
	delete []pdA1;
	double *pdA2 = (double *)new double[3750];
	if(!pdA2){
		delete pi; exit(0);
	}
	delete []pdA2;
	delete pi;
}

程序重载了全局的new和delete运算符,但与其他不同的是,本程序并不使用系统预装定义函数malloc和free来参与具体的动态内存分配与释放,而是由程序自己在重载的new 和delete函数体中来控制管理属于自己的一大块所谓的“动态存储空间(如程序中的字符数组空间MemArr)。即是说,重载的new函数要负责在自己的动态存储空间中进行分配,而重载的delete函数则要负责回收所释放的空间(仍由自己掌握,而后可以再一次被分配使用等)。由于重载了全局运算符new 和delete ,所以本程序中使用printf代替cout进行屏幕输出。


输出strcpy()函数有问题,需要解决。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • new与默认构造函数

    class A public A int i int 0 private int a b class B public 无需构造函数 因为数据成员的全部为public int a b c int main A a 3 B b 1 2 3 A
  • Cpp学习——动态内存管理

    目录 一 new 1 malloc realloc calloc的使用不便之处 2 new的好处 3 opreator new 二 delete 1 为什么要有delete 2 为什么要匹配使用 一 new 1 malloc realloc
  • C++内存管理

    http blog csdn net zhanghefu article details 5003383 内存管理是C 最令人切齿痛恨的问题 也是C 最有争议的问题 C 高手从中获得了更好的性能 更大的自由 C 菜鸟的收获则是一遍一遍的检查
  • js中new 到底做了瓦特??比较new、Object.create、Object.setPrototypeOf

    实例化的时候我们都是这样 var box new BOX 那么new在中间有什么作用呢 new 先创建一个新对象b new Object 将构造函数作用域赋给新变量 b proto BOX prototype 执行构造函数中的代码 属性 方
  • vld(Visual Leak Detector)下载地址和源码地址

    安装包下载页面 https kinddragon github io vld eg https github com KindDragon vld releases download v2 5 1 vld 2 5 1 setup exe 源
  • 构造函数析构函数为什么没有返回值?

    构造函数析构函数为什么没有返回值 Liupq 2008 5 10 构造函数和析构函数是两个非常特殊的函数 它们没有返回值 这与返回值为void的函数显然不同 后者虽然也不返回任何值 但还可以让它做点别的事情 而构造函数和析构函数则不允许 在
  • gperftools TcMalloc 内存池的使用

    下载地址 https github com gperftools gperftools vs2013可以选择2 7编译 更高版本需要更高版本的vs 指定版本下载路径如下图 lib dll的使用方式 在导入库中设置dll 在强制符号引用中设置
  • C++ 函数模板与类模板template,以及具体化、实例化

    函数模板 需要创建针对不同参数类型的实现相同功能的不同函数 注 模板不能缩短可执行程序 最终仍是有多个独立的函数定义 另 若对不同类型的参数执行不同的算法 可以重载模板定义 前提是两函数的特征标不同 例 template
  • VC 根据域名获取IP

    include Winsock2 h pragma comment lib Ws2 32 lib 注意字符串需以 0结尾 例如 lpzSeverName www baidu com 0 bool WINAPI Domain2IP char
  • C++模板特例化

    模板是用来写一些独立化特定类型的代码 但是对于有些类型 在处理时 细节上却有所差别 常见的如char 如 现在你打算写一个栈 可以用于任何数据类型 那你肯定首先想到的就是模板啦 template
  • C++多线程:thread_local

    概念 首先thread local是一个关键词 thread local是C 11新引入的一种存储期指定符 它会影响变量的存储周期 Storage duration 与它同是存储期指定符的还有以下几个 关键字 说明 备注 auto 自动存储
  • Unicode下CString和char *之间的互相转换

    CString中存储的字符的数据类型为wchar t类型 一 CString转换为char 1 方法一 使用wcstombs include
  • Haxe: class, object, new and constructor

    haxe 类 对象 new 和 构造函数 package if neko import neko Lib import neko io File end class Thing public function new trace new f
  • ASCII码详解

    ASCII码表 ASCII码大致可以分作三部分組成 第一部分是 ASCII非打印控制字符 第二部分是 ASCII打印字符 第三部分是 扩展ASCII打印字符 第一部分 ASCII非打印控制字符表 ASCII表上的数字0 31分配给了控制字符
  • memset in C++ and C

    definition memset是计算机中C C 语言函数 将s所指向的某一块内存中的前n个 字节的内容全部设置为ch指定的ASCII值 第一个值为指定的内存地址 块的大小由第三个参数指定 这个函数通常为新申请的内存做初始化工作 其返回值
  • leetcode 1035. 不相交的线

    2023 8 25 本题可以转化为 求两数组的最长公共子序列 进而可以用dp算法解决 方法类似于这题最长公共子序列 代码如下 class Solution public int maxUncrossedLines vector
  • c++的多态和虚函数

    c 的多态和虚函数 什么是多态 虚函数在多态中的运用 静态关联和动态关联 什么情况下声明虚函数 虚折构函数 纯虚函数 什么是多态 直观的说 就是向不同的对象发送一个消息 不同的对象在接收消息以后有不同的行为 函数重载和运算符重载都是多态现象
  • 20个常见的Java错误以及规避方法

    原文 50 Common Java Errors and How to Avoid Them Part 1 作者 Angela Stringfellow 翻译 雁惊寒 译者注 本文介绍了20个常见的Java编译器错误 每种错误都包含了代码片
  • delete 和 delete []的真正区别

    c 中对new申请的内存的释放方式有delete和delete 两种方式 到底这两者有什么区别呢 1 我们通常从教科书上看到这样的说明 delete 释放new分配的单个对象指针指向的内存 delete 释放new分配的对象数组指针指向的内
  • 拷贝构造函数和赋值构造函数声明为私有的作用

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

随机推荐

  • 指针地址+1的理解

    指针向后移动一个单位 xff0c 如果是char指针 xff0c 就是1 xff0c 如果是int指针 xff0c 就是4 xff0c 如果是数组 xff0c 还要看是哪一维的下标 xff0c 要加上相应的维 include lt stdi
  • ConcurrentHashMap、synchronized与线程安全

    最近做的项目中遇到一个问题 xff1a 明明用了ConcurrentHashMap xff0c 可是始终线程不安全 除去项目中的业务逻辑 xff0c 简化后的代码如下 xff1a public class Test40 public sta
  • Spring MVC集成slf4j-logback

    1 Spring MVC集成slf4j log4j 关于slf4j和log4j的相关介绍和用法 xff0c 网上有很多文章可供参考 xff0c 但是关于logback的 xff0c 尤其是Spring MVC集成logback的 xff0c
  • 安装spinningup填坑ERROR: Could not build wheels for mpi4py which use PEP 517

    深度强化学习教程 xff1a Spinning Up项目中文版 Spinning Up 文档 ERROR Failed building wheel for mpi4py Failed to build mpi4py ERROR Could
  • Spring Bean 创建过程

    0 通常 xff0c 无论是DispatcherServlet ContextLoaderListener还是ClassPathXmlApplicationContext xff0c 首次实例化bean的入口并不是在每次调用getBean的
  • MySQL DataSource 性能对比(2015-8-19)

    1 本地性能测试耗时 xff08 一 xff09 共同条件 xff1a 测试程序与数据库在同一台主机上 xff0c 各DataSource均采用默认配置 xff0c 每个线程循环1000次 xff0c 查询语句为select from ta
  • MySQL 乐观锁 简例

    乐观锁与悲观锁不同的是 xff0c 它是一种逻辑上的锁 xff0c 而不需要数据库提供锁机制来支持 当数据很重要 xff0c 回滚或重试一次需要很大的开销时 xff0c 需要保证操作的ACID性质 xff0c 此时应该采用悲观锁 而当数据对
  • HTML5 Canvas 初步:字符串,路径,背景,图片

    HTML5中新增了 lt canvas gt 画布标签 xff0c 通过它 xff0c 可以使用JavaScript在网页中绘制图像 lt canvas gt 标签在网页中得到的是一个矩形空白区域 xff0c 可以通过width和heigh
  • CSS 伪类与伪元素

    CSS的元素选择器除了根据id xff08 xff09 class xff08 xff09 属性 xff08 xff09 选取元素以外 xff0c 还有很重要的一类 xff0c 就是根据元素的特殊状态来选取元素 它们就是伪类和伪元素 跟id
  • CSS3 动画效果总结

    CSS3添加了几个动画效果的属性 xff0c 通过设置这些属性 xff0c 可以做出一些简单的动画效果而不需要再去借助JavaScript CSS3动画的属性主要分为三类 xff1a transform transition以及animat
  • Javassist学习总结

    要想将编译时不存在的类在运行时动态创建并加载 xff0c 通常有两种策略 xff1a 1 动态编译 2 动态生成二进制字节码 xff08 class xff09 对于第二种策略 xff0c 实际上已经有诸多比较成熟的开源项目提供支持 xff
  • viewstub学习笔记

    当需要在运行时动态改变布局的情况下 xff0c 使用viewstub来进行动态的布局架构是逻辑简单控制灵活的 xff0c 并且相比于设置view gone来说viewstub更加的轻量化 xff0c 只有当调用了viewstub infla
  • 程序员的酸甜苦辣——告别Coding

    程序员的酸甜苦辣 告别Coding lt script language 61 34 javascript 34 type 61 34 text javascript 34 gt document title 61 34 程序员的酸甜苦辣
  • 基于参考注释的RNA-seq分析

    Step 1 构建参考序列索引 xff1a mkdirbti 在 stuXX 目录下新建文件夹 cd bti ln s database peixun2015 ref ath fa 在当前目录 xff0c 建立参考序列文件的超链接 bowt
  • maddpg 复现过程中遇到的问题

    最近在复现论文Multi Agent Actor Critic for Mixed Cooperative Competitive Environments https github com openai multiagent partic
  • "error while loading shared libraries: xxx.so.x" 错误的原因和解决办法

    一般我们在Linux下执行某些外部程序的时候可能会提示找不到共享库的错误 比如 tmux error while loading shared libraries libevent 1 4 so 2 cannot open shared o
  • SUN VirtualBox 的命令行启动/关闭方法简介

    我们可以使用VBxManager 命令行管理工具来查看当前的虚拟基设置 和状态 QHo 64 qhoferrari1k VBoxManage list vms 下面通过实例来说明如何从命令行启动和关闭VirtualBox 虚拟机的两种常用方
  • 运维日记011 - Ubuntu下更改初始用户名的方法

    运维日记011 Ubuntu下更改初始用户名的方法 引子 Ubuntu每两年一次发布的LTS版本都会倍加引人关注 xff0c 因为LTS版本有长达五年的支持周期 xff0c 对于我等不是太喜欢折腾尝鲜而是希望几年之内不用重装系统的用户颇有吸
  • SWIG学习记录(一)SWIG基础

    SWIG学习记录 1 什么是SWIG 1 2 特性1 2 1 预处理 2 SWIG安装3 SWIG基础介绍3 1 运行SWIG3 1 1 输入格式3 1 2 输出3 1 3 注释3 1 4 预编译3 1 5 SWIG指令3 1 6 解析器的
  • Cpp--重载全局的new和delete

    include lt iostream gt include lt process h gt include lt string h gt include lt stdio h gt define MAX SIZE 30000 char M