重载operator new delete函数
可以重载global的operator new delete 函数,细节如下:
MyNewDelete.h
#pragma once
#include <stdlib.h>
#include <string>
#include <iostream>
using namespace std; class Foo
{
public:
int id;
string str; Foo() : id() { cout << "default ctor.this=" << this << "id=" << id << endl; }
Foo(int i) : id(i) { cout << "ctor.this=" << this << "id=" << id << endl; } //若构造函数为virtual 则Fool对象会多一个指针大小的内存用来存虚指针vptr
~Foo() { cout << "dtor.this=" << this << "id=" << id << endl; }; static void *operator new(size_t size); //重载全局operator new 函数;
static void operator delete(void *pdead, size_t size); //重载全局operator delete函数;
static void *operator new[](size_t size); //重载全局operator new[]函数;
static void operator delete[](void *pdead, size_t size); //重载全局operator delete[]函数;
};
NewDelete.cpp
#include <iostream>
#include <ostream>
#include "MyNewDelete.h" void *Foo::operator new(size_t size)
{
Foo *p = (Foo *)malloc(size);
cout << "Foo::operator new. size=" << size << " return " << p << endl;
return p;
} void Foo::operator delete(void *pdead, size_t size)
{
cout << "Foo::operator delete. size=" << size << " pdead= " << pdead << endl;
free(pdead);
} void *Foo::operator new[](size_t size)
{
Foo *p = (Foo *)malloc(size * sizeof(Foo));
cout << "Foo::operator new[]. size=" << size * sizeof(Foo) << " return " << p << endl;
return p;
} void Foo::operator delete[](void *pdead, size_t size)
{
cout << "Foo::operator delete[]. size=" << size * sizeof(Foo) << " pdead= " << pdead << endl;
free(pdead);
} int main()
{
cout << sizeof(Foo) << endl;
//若无members 才调用globals
//调用members
Foo *pf = new Foo;
delete pf;
cout << "--------------------------------------------------" << endl;
//调用globals
//Foo *pf = ::new Foo;
//::delete pf; Foo *p = new Foo();
delete p;
cout << "--------------------------------------------------" << endl;
Foo *pArray = new Foo[];
delete[] pArray; return ;
}
重载operator new delete函数的更多相关文章
- 从零开始学C++之重载 operator new 和 operator delete 实现一个简单内存泄漏跟踪器
先来说下实现思路:可以实现一个Trace类,调用 operator new 的时候就将指向分配内存的指针.当前文件.当前行等信息添加进Trace 成员map容器内,在调用operator delete ...
- C++面向对象高级编程(九)Reference与重载operator new和operator delete
摘要: 技术在于交流.沟通,转载请注明出处并保持作品的完整性. 一 Reference 引用:之前提及过,他的主要作用就是取别名,与指针很相似,实现也是基于指针. 1.引用必须有初值,且不能引用nul ...
- 走进C++程序世界-----operator new delete 重载
在C++ 的世界里,new 和delete 是keyword.而在C的世界里相相应的malloc和free是函数,关键C++的new和delete分析,详见前面的章节.这里就不在过多的介绍了.链接. ...
- C++重载new和delete运算符
内存管理运算符 new.new[].delete 和 delete[] 也可以进行重载,其重载形式既可以是类的成员函数,也可以是全局函数.一般情况下,内建的内存管理运算符就够用了,只有在需要自己管理内 ...
- 重载new和delete
当我们创建一个new表达式时,会发生两件事.首先使用operator new()分配内存,然后调用构造函数.在delete表达式里,调用了析构函数,然后使用operator delete()释放内存. ...
- C++ 重载new和delete操作符
原因: C++标准库提供的new和delete操作符,是一个通用实现,未针对具体对象做具体分析 存在分配器速度慢.小型对象空间浪费严重等问题,不适用于对效率和内存有限制的应用场景 好处: 灵活的内 ...
- C++中基于Crt的内存泄漏检测(重载new和delete,记录在Map里)
尽管这个概念已经让人说滥了 ,还是想简单记录一下, 以备以后查询. #ifdef _DEBUG#define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FIL ...
- 重载operator new实现检测内存泄漏是否可行
行与不行,就凭我这水平,说出来未免显示太过自大.不还,我还想根据自己的代码来讨论这个问题. 重载operator new来检测内存只的办法,那就是在new的时候记录指针地址及文件名.行号,在delet ...
- 重载new和delete来检测内存泄漏
重载new和delete来检测内存泄漏 1. 简述 内存泄漏属于资源泄漏的一种,百度百科将内存泄漏分为四种:常发性内存泄漏.偶发性内存泄漏.一次性内存泄漏和隐式内存泄漏. 常发性指:内存泄漏的代 ...
随机推荐
- Navicat Premium基本使用
Navicat Premium基本使用 转自:https://blog.csdn.net/Yangchenju/article/details/80633055 Navicat Premium基本使用 ...
- SSM框架——详细整合教程
SSM框架——详细整合教程(Spring+SpringMVC+MyBatis) 1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Jav ...
- Failed to execute goal on project e3-manager: Could not resolve dependencies for project cn.e3mall:e3-manager:pom:0.0.1-SNAPSHOT: Could not find artifact cn.e3mall:e3-parent:jar:0.0.1-SNAPSHOT
新建好工程后一定要记得从底层开始clean和install 在启动新建的工程时到最后一步出现了这个问题: Failed to execute goal on project e3-manager-we ...
- C#中使用FilleStream实现视频文件的复制
场景 C#中FileStream的对比以及使用方法: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100396022 关注公众号 ...
- CSS——字体
1.字体样式font-family.颜色color <!DOCTYPE html> <html> <head> <meta charset="UTF ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(二十二):如何安装 Nuget(dll) 后使用项目源代码调试
最近碰到开发者问:我使用 nuget 安装了 Senparc.Weixin SDK,但是有一些已经封装好的过程想要调试,我又不想直接附加源代码项目,这样就没有办法同步更新了,我应该怎么办? 这其实是一 ...
- 是的,是你的BFC - CSS中常用
是的,是你的BFC - CSS中常用 是的,是你的BFC - CSS中常用 CFC 全称:(Block Formatting Contexts)含义是块级格式化上下文),就是一个块级元素的渲染 ...
- java枚举的应用
最近的项目中,看前辈们用到的枚举比较多,由于自己之前对枚举这种类型不是很了解,遂花费心机看了下,整理记录下. 1.枚举常量 系统中定义的状态字段,用的比较多: public enum orderTyp ...
- Android 正 N 边形圆角头像的实现
卖一下广告,欢迎大家关注我的微信公众号,扫一扫下方二维码或搜索微信号 stormjun94(徐公码字),即可关注. 目前专注于 Android 开发,主要分享 Android开发相关知识和一些相关的优 ...
- Java中自定义注解类,并加以运用
在Java框架中,经常会使用注解,而且还可以省很多事,来了解下自定义注解. 注解是一种能被添加到java代码中的元数据,类.方法.变量.参数和包都可以用注解来修饰.注解对于它所修饰的代码并没有直接的影 ...