走进C++程序世界-----operator new delete 重载
在C++ 的世界里,new 和delete 是keyword。而在C的世界里相相应的malloc和free是函数,关键C++的new和delete分析,详见前面的章节。这里就不在过多的介绍了。链接。
以下来研究下关于new 和delete的重载。
1、对照使用重载和未使用重载
未使用“
/*File : operator_new.cpp
*Auth : sjin
*Date : 2014-04-27
*Mail : 413977243@qq.com
*/ #include <iostream> using namespace std; class test {
public:
test(){cout << "*****构造test()*****"<< endl;};
~test(){cout << "+++++析构test()+++++"<< endl;};
}; int main()
{
test * x = new test;//运行分配空间,再运行析构函数
delete x;//先运行析构函数,在释放空间
}
使用重载后,
/*File : operator_new.cpp
*Auth : sjin
*Date : 2014-04-27
*Mail : 413977243@qq.com
*/ #include <iostream> using namespace std; char mem[10000] = {'\0'};
int pos = 0; class test {
public:
test(){cout << "*****构造test()*****"<< endl;};
~test(){cout << "+++++析构test()+++++"<< endl;}; public:
void * operator new(size_t bytes){
cout << "------new test()------" << endl;
int alloc = pos;
pos += bytes;
return (mem + alloc);
}; void operator delete(void *){
cout << "------delete test()------" << endl; };
}; int main()
{
test * x = new test; delete x;
}
/*File : operator_new.cpp
*Auth : sjin
*Date : 2014-04-27
*Mail : 413977243@qq.com
*/ #include <iostream> using namespace std; char mem[10000] = {'\0'};
int pos = 0; class test {
public:
test(){cout << "*****构造test()*****"<< endl;};
~test(){cout << "+++++析构test()+++++"<< endl;}; public:
void * operator new(size_t bytes){
cout << "------new test()------" << endl;
int alloc = pos;
pos += bytes;
return (mem + alloc);
}; void operator delete(void *){
cout << "------delete test()------" << endl; };
}; int main()
{
test * x = new test; delete x; x = new test[3]; delete [] x;//这里对数组释放,须要注意
}
#include <iostream>
using namespace std;
char mem[10000] = {'\0'};
int pos = 0;
class test {
public:
test(){cout << "*****构造test()*****"<< endl;};
~test(){cout << "+++++析构test()+++++"<< endl;};
public:
void * operator new(size_t bytes){
cout << "------new test()------" << endl;
int alloc = pos;
pos += bytes;
return (mem + alloc);
};
void operator delete(void *){
cout << "------delete test()------" << endl;
};
void * operator new[](size_t bytes){
cout << "------new test()------" << endl;
int alloc = pos;
pos += bytes;
return (mem + alloc);
};
void operator delete[](void *){
cout << "------delete test()------" << endl;
};
};
int main()
{
test * x = new test;
delete x;
x = new test[3];
delete [] x;
}
对new 和delete 函数的重载能够用来检測 内存泄露的情况。
走进C++程序世界-----operator new delete 重载的更多相关文章
- 走进C++程序世界-----继承和派生(2)
覆盖基类的函数 覆盖基类函数顾名思义就是在派生类中对基类的函数进行的重新定义.这里将会讲到下面的2个知识点: 1.隐藏基类的方法 2.调用基类的方法(隐式和显示调用基类的方法) /* *derive2 ...
- 走进C++程序世界-----函数相关(全局变量)
全局变量 在函数外面定义的变量的作用域为全局,在程序的任何函数中都可用.与全局变量同名的局部变量不会修改全局变量的值,但会隐藏它.如果函数中有一个与全局变量同 名的局部变量时,则在函数中使用该名称时, ...
- 走进C++程序世界------IO标准库介绍
流概述 流是C++标准的组成部分,流的主要目标是,将从磁盘读取文件或将输入写入控制台屏幕的问题封装起来,创建流后程序猿就能够使用它.流将负责处理全部的细节. IO类库 在C++输入、输出操作是通 ...
- 走进C++程序世界------异常处理
一. 概述 C++自身有着很强的纠错能力,发展到现在,已经建立了比較完好的异常处理机制. C++的异常情况无非两种,一种是语法错误.即程序中出现了错误的语句,函数.结构和类,致使编译程序无法进行.还有 ...
- 走进C++程序世界------继承和派生
继承和派生 继承是面向对象编程语言的最重要方面之一,正确的使用继承可编写出设计良好,容易于维护和扩展的应用程序.下面是在其他博客中的总结: ****************************** ...
- 走进C++程序世界-------类的定义和使用(数据成员和方法成员,析构函数,构造函数,内联实现)
类的成员简介 在C++中,可以通过声明一个类来穿件一种新的类型.类将一组变量(他们的类型通常不同)和一组相关的函数组合在一起.类可以有各种类型的变量组成,还可以包含其他类对象.成员变量称为数据成员它们 ...
- [百度空间] [原] 全局operator delete重载到DLL
由于很久没有搞内存管理了,很多细节都忘记了今天项目要用到operator delete重载到DLL,发现了问题,网上搜索以后,再对比以前写的代码,发现了问题:原来MSVC默认的operator new ...
- 重载operator new delete函数
可以重载global的operator new delete 函数,细节如下: MyNewDelete.h #pragma once #include <stdlib.h> #includ ...
- C#7.2——编写安全高效的C#代码 c# 中模拟一个模式匹配及匹配值抽取 走进 LINQ 的世界 移除Excel工作表密码保护小工具含C#源代码 腾讯QQ会员中心g_tk32算法【C#版】
C#7.2——编写安全高效的C#代码 2018-11-07 18:59 by 沉睡的木木夕, 123 阅读, 0 评论, 收藏, 编辑 原文地址:https://docs.microsoft.com/ ...
随机推荐
- Codeforces Round #364 (Div. 1) 700B(树)
题目大意 在n颗结点的树上有2k个需要配对的点,把他们两两配对,使得路程和最大并输出 选取一个点v lv表示v与父亲的边 那么考虑lv被经过的次数,对于一个最大的情况,lv应该为min(sv, 2*k ...
- GYM - 101147 A.The game of Osho
题意: 一共有G个子游戏,一个子游戏有Bi, Ni两个数字.两名玩家开始玩游戏,每名玩家从N中减去B的任意幂次的数,直到不能操作判定为输.问谁最终能赢. 题解: 当Bi为奇数的时候,显然Bi的所有次幂 ...
- flutter channel master
flutter可能是未来跨平台开发的又一技术框架,那么对于一个app,我们不可能完全用flutter来开发,那么就意味着我们需要在已有的Android和iOS代码中去集成flutter.目前这一技术还 ...
- 【CZY选讲·Triangle】
题目描述 长度为的铁丝,你可以将其分成若干段,并把每段都折成一个三角形.你还需要保证三角形的边长都是正整数并且三角形两两相似,问有多少种不同的分法. 数据范围 1≤≤10^6 题解: ①相 ...
- HTML,CSS,font-family:中文字体的英文名称【转载】
转自:http://www.9958.pw/post/html_font-family 宋体 SimSun 黑体 SimHei 微软雅黑 Microsoft YaHei 微软正黑体 Microsoft ...
- php中json_encode和json_decode的用法
1.json_encode基本用法:数组转字符串 <?php $arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5); ...
- 牛客~~扫雷~~~DFS+模拟
链接:https://www.nowcoder.com/acm/contest/118/F来源:牛客网 题目描述 <扫雷>是一款大众类的益智小游戏,于1992年发行.游戏目标是在最短的时间 ...
- 模拟Windows系统“回收站”
HTML: <!DOCTYPE html><html> <head> <meta http-equiv="content-type" co ...
- mac 安装 nodeJs&npm 配置
前言:继续安装 nodeJS 下载安装:直接去官网,点击安装即可. 命令式安装: 1. 安装 homebrew 2. 安装 nodeJS,使用命令:brew install node 3. 测试 no ...
- OI 知识体系
OI Training 知识体系结构 初级 1.1 C语言基础 1.1.1 C语言程序结构(A+B Problem) 1.1.2 变量,常量,数据类型,输入与输出 1.1.3 条件语句 1.1.4 循 ...