29.局部和全局重载new delete

 1 #include <iostream>
 2 #include <Windows.h>
 3 using namespace std;
 4
 5 //全局内存管理,统计释放内存,分配内存
 6
 7 //重载全局的new
 8 void *operator new(size_t size)
 9 {
10     cout << "g_new call" << endl;
11     void *p = malloc(size);
12     return p;
13 }
14
15 //重载全局的delete
16 void operator delete(void *p)
17 {
18     cout << "g_delete call" << endl;
19     free(p);
20 }
21
22 //重载全局的new[]
23 void *operator new [](size_t size)
24 {
25     cout << size << endl;
26     cout << "g_new call []" << endl;
27     return operator new(size);//每个元素调用一次new
28 }
29
30 //重载全局的delete
31 void operator delete [](void *p)
32 {
33     cout << "g_delete [] call" << endl;
34     free(p);
35 }
36
37 class myclass
38 {
39 public:
40     myclass()
41     {
42         cout << "create call" << endl;
43     }
44     ~myclass()
45     {
46         cout << "delete call" << endl;
47     }
48     //局部重载new
49     static void * operator new(size_t size)
50     {
51         cout << "new call" << endl;
52         return malloc(size);
53     }
54     //局重载delete
55     static void operator delete(void *p)
56     {
57         ::delete p;
58     }
59 };
60
61 void main()
62 {
63     //int *p = new int[3]{ 1,2,3 };
64     //cout << p[1] << endl;
65
66     //myclass *p = new myclass;
67     //delete p;
68
69     //int *pint = new int[10];
70     myclass *p1 = new myclass;
71     //delete p1;
72
73     cin.get();
74 }

原文地址:https://www.cnblogs.com/xiaochi/p/8546904.html

时间: 2024-10-29 13:05:17

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

Java知多少(29)覆盖和重载

在类继承中,子类可以修改从父类继承来的方法,也就是说子类能创建一个与父类方法有不同功能的方法,但具有相同的名称.返回值类型.参数列表. 如果在新类中定义一个方法,其名称.返回值类型和参数列表正好与父类中的相同,那么,新方法被称做覆盖旧方法. 参数列表又叫参数签名,包括参数的类型.参数的个数和参数的顺序,只要有一个不同就叫做参数列表不同. 被覆盖的方法在子类中只能通过super调用. 注意:覆盖不会删除父类中的方法,而是对子类的实例隐藏,暂时不使用. 请看下面的例子: 1 public class

struts局部、全局类型转换器

第01步:编写bean package com.self.bean; import java.util.Date; public class User { private Date birthday = null; public Date getBirthday() { System.out.println("获得-User:" + birthday); return birthday; } public void setBirthday(Date birthday) { System

laravel5.3-数据库操作下的局部or条件与全局or条件(orWhere的局部与全局)

当用户名不为空时 SELECT * FROM `ACCOUNT_RECHARGE` LEFT JOIN `ORDER` ON `ACCOUNT_RECHARGE`.`OrderNo` = `ORDER`.`OrderNo` LEFT JOIN `USER_ACCOUNT` ON `ORDER`.`UserId` = `USER_ACCOUNT`.`UserId` WHERE (`USER_ACCOUNT`.`UserName` LIKE '%18%' OR (`USER_ACCOUNT`.`Mo

Struts2之局部与全局类型转换器

定义一个测试类 package struts2.example.action; import java.util.Date; public class HelloWorldAction { private Date birthday; public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { System.out.print(birthday); this.birthday =

vue组件局部与全局注册的区别

//局部注册 var mycomponent = new extend({        <!--Vue.extend()是Vue构造器的扩展,调用Vue.extend()我们将创建一个组件构造器--> template:"<div>我是局部注册</>" }) new Vue({ el:"#app", components:{                 <!--components是实现局部注册的属性--> &q

深入浅出理解局部、全局、静态、动态、外部变量

1.全部变量.局部变量 局部变量:定义在函数内部的变量,作用域为函数内部         eg: void fun(){ int x;} 全部变量:只能定义一次,多次引用.作用域为整个文件. 若同一个源文件,全局变量和局部变量重名是,在局部变量的作用域,全部变量不起作用. 关键词: 全部变量:函数外定义+全局可见+存放在内存的全局数据区+未初始化的的时候为0 局部变量:函数内定义+函数内可见+存放在栈区,函数退出变量消失+不显式初始化内容不可预知 2.静态存储变量.动态存储变量 静态存储变量:程

类模板 友元重载形式 各种运算符重载 new delete ++ = +=

今天的重载是基于C++ 类模板的,如果需要非类模板的重载的朋友可以把类模板拿掉,同样可以参考,谢谢. 一.类模板中的友元重载 本人喜好类声明与类成员实现分开写的代码风格,如若您喜欢将类成员函数的实现写在类声明中,那么可以跳过该部分. 请看下面这段代码: 头文件: #pragma once template<typename T> class CLA { T m_value; public: CLA(const T&); friend CLA operator+(const CLA&am

第三章 指令-- 29 指令-自定义全局指令让文本框获取焦点

1 <!DOCTYPE html> 2 <html lang="en"> 3 4 <head> 5 <meta charset="utf-8"> 6 <meta name="viewport" content="width=device-width,initial-scale=1.0"> 7 <title>Document</title> 8

Struts 类型转换之局部和全局配置

我们碰到过很多情况,就是时间日期常常会出现错误,这是我们最头疼的事,在struts2中有一些内置转换器,也有一些需要我们自己配置. 我们为什么需要类型转换呢? 在基于HTTP协议的Web应用中 客户端请求的所有内容(表单中提交的内容等)都以文本编码的方式传输到服务器端但服务器端的编程语言(如Java)有着丰富的数据类型 如 int boolean Date 等等因此 当这些参数进入应用程序时 必须被转换成适合的服务器端编程语言的数据类型 在Servlet中 类型转换工作是由开发者自己完成的,例如