内存管理运算符 new、new[]、delete 和 delete[] 也可以进行重载,其重载形式既可以是类的成员函数,也可以是全局函数。一般情况下,内建的内存管理运算符就够用了,只有在需要自己管理内存时才会重载。

以成员函数的形式重载 new 运算符:

void * className::operator new( size_t size ){//TODO:
}

以全局函数的形式重载 new 运算符:

void * operator new( size_t size ){//TODO:
}

两种重载形式的返回值相同,都是void *类型,并且都有一个参数,为size_t类型。在重载 new 或 new[] 时,无论是作为成员函数还是作为全局函数,它的第一个参数必须是 size_t 类型。size_t 表示的是要分配空间的大小,对于 new[] 的重载函数而言,size_t 则表示所需要分配的所有空间的总和。

 size_t 在头文件 <cstdio> 中被定义为typedef unsigned int size_t;,也就是无符号整型。

当然,重载函数也可以有其他参数,但都必须有默认值,并且第一个参数的类型必须是 size_t。

同样的,delete 运算符也有两种重载形式。以类的成员函数的形式进行重载:

void className::operator delete( void *ptr){//TODO:
}

以全局函数的形式进行重载:

void operator delete( void *ptr){//TODO:
}

两种重载形式的返回值都是 void 类型,并且都必须有一个 void 类型的指针作为参数,该指针指向需要释放的内存空间。

当我们以类的成员函数的形式重载了new 和 delete 操作符,其使用方法如下:

C * c = new C;  //分配内存空间
//TODO:
delete c;  //释放内存空间

如果类中没有定义 new 和 delete 的重载函数,那么会自动调用内建的 new 和 delete 运算符。

C++ 重载new和delete运算符相关推荐

  1. 重载new、delete和强制类型转换运算符()

    1.重载new和delete运算符 内存管理运算符new.new[].delete和delete[]也可以进行重载,其重载形式既可以是类的成员函数,也可以是全局函数.一般情况下,内建的内存管理运算符就 ...

  2. c++重载运算符_C/C++编程笔记:运算符重载丨重载C++中的New和Delete运算符

    new和delete运算符也可以像C ++中的其他运算符一样重载.New和Delete运算符可以全局重载,也可以在特定类中重载. (1)如果使用某个类的成员函数来重载这些运算符,则意味着这些运算符仅针 ...

  3. Cpp 对象模型探索 / delete 运算符内部调用过程分析

    一.delete 调用过程 1.测试代码,在 delete 处打下断点. class CTest { public:CTest() {}~CTest() {} };int main() {CTest* ...

  4. 运算符重载(加减运算符、前置加加(减减)后置加加(减减)运算符、赋值运算符、输入输出运算符、关系运算符、函数调用)

    编译器对于一个类会默认生成以几种函数: 1.默认构造函数(空形参,空函数体) 2.默认拷贝构造函数(浅拷贝,也叫值拷贝.字节拷贝) 3.析构函数(空形参,空函数体.析构函数要求形参列表必须是空的,所以 ...

  5. C++_重载new,delete

    C++_重载new,delete 这里重载的是new三步delete两步里的第一步操作,这点一定要注意,所以下面出现size可以直接malloc,可以看以前笔记 new表达式(new).operato ...

  6. C++:运算符重载函数之成员运算符重载函数

    5.2.3 成员运算符重载函数 在C++中可以把运算符重载函数定义为某个类的成员函数,称之为成员运算符重载函数. 1. 定义成员运算符重载函数的语法形式 (1)在类的内部,定义成员运算符重载函数的格式 ...

  7. JavaScript中delete运算符

    JavaScript中delete运算符是 从对象中删除一个属性,或从数组中删除一个元素. 使用方法: delete expressionwww.mlybyby.com expression 参数是一 ...

  8. c++中的new与delete运算符

    ** C++语言中内存的管理使用new和delete运算符实现分别用于内存申请与内存释放** 1.new运算符 基本格式: 类型说明符 * 指针变量名 = new 类型说明符 格式二 类型说明符 * ...

  9. C++new和delete运算符

    C++new和delete运算符 1)new 2)delete 3)operator new和operator delete的实现 4)针对数组的new语意 1)new int *pi = new i ...

最新文章

  1. ETL MySQL in Oracle ODI 12c
  2. 物联网的发展之—Vecloud微云
  3. VisualSVN安装配置与使用
  4. SAP Spartacus B2B 页面 Disable 按钮的显示原理
  5. linux线程池资料
  6. 安卓app开发工具_怎么开发app软件需要多少钱?主流app开发工具盘点
  7. mysql-外键-随堂
  8. 第四步_安装gcc交叉编译工具
  9. zabbix详解(一)——zabbix基本概念
  10. python策略模式包含角色_Python 之策略模式
  11. PDF文档转换成mobi格式(for kindle),并解决排版问题
  12. 新形势下电力监控系统网络安全风险分析与防护对策
  13. Xshell_4.0绿色版
  14. 新东方 词根词缀 excel_背单词 | 新东方的杨鹏老师用什么方法?
  15. 数据分析——常见数据指标汇总
  16. android手机无分区无法刷机,adb sideload 刷机教程:当你手机无法开机,内存里没有ROM时......
  17. 使用Tab键控制切换网页光标位置
  18. python统计单词出现次数最多的5个单词_【Python】统计文本中单词的出现次数前十的单词...
  19. 生产型企业如何搭建进销存管理系统?低代码平台了解一下
  20. CS231n系列之 Lecture1:Introduction

热门文章

  1. 数据立方体_立方体纹理
  2. mysql 两字段相乘_sql统计2列相乘和语句.doc
  3. 鸿蒙手机是个噱头,华为鸿蒙不是谈判噱头 必要时会应用手机当中!
  4. 如何使用和自定义Win11快速设置菜单
  5. uc浏览器将在印度推出电商服务
  6. Java SSM篇3——Mybatis
  7. html拖拽模态框,可拖拽的谷歌样式纯javascript模态窗口插件
  8. 在PHP中如何要json中的数据,如何在不知道键值的情况下在php中读取JSON数据
  9. JVM 学习四:类加载之双亲委派机制与沙箱安全机制
  10. 二进制编译安装mysql_二进制编译安装mysql