博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++重载new和delete运算符
阅读量:5088 次
发布时间:2019-06-13

本文共 928 字,大约阅读时间需要 3 分钟。

内存管理运算符 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 操作符,其使用方法如下:

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

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

转载于:https://www.cnblogs.com/gzgb/p/6242067.html

你可能感兴趣的文章
HDU-3790 最短路径问题
查看>>
utime函数
查看>>
更换Kali源让你更新更快
查看>>
mysql插入测试数据
查看>>
0916 编译原理第二次上机作业
查看>>
从指定路径下的N首歌曲随机复制到指定名字的M首歌曲
查看>>
MySQL中tinytext、text、mediumtext和longtext详解
查看>>
HDU 4165 Pills(DP/记忆化搜索/卡塔兰数)
查看>>
mybatis Java API
查看>>
LeetCode 189. Rotate Array
查看>>
转:vs发布window应用程序时出错:未能签名 ...\setup.exe
查看>>
Spring Boot @ControllerAdvice 处理全局异常,返回固定格式Json
查看>>
Android学习一(入门)
查看>>
nyoj-大小写互换
查看>>
物理层
查看>>
【bzoj2127】happiness 网络流最小割
查看>>
Windows中报错:Fatal error in launcher: Unable to create process using '"' 的解决方案
查看>>
VIM操作常用指令(转)
查看>>
在绘制的扇形里加载一张图片
查看>>
winform combobox绑定数据
查看>>