C++ 重载 new/delete
new和delete操作符重载:
内存管理运算符 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; //释放内存空间
转载:http://c.biancheng.net/view/2314.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通