【51】编写new和delete时需固守常规
1、【50】讲了,有很多理由需要写个自定义的new/delete,自定义new/delete的时候,需要遵守一些规则。
2、循环申请,直到成功或者抛出异常,如下:
1 void* operator new (std::size_t size) throw() 2 { 3 if(size=0) 4 { 5 size =1; 6 } 7 while (true) 8 { 9 if(分配成功) 10 { 11 return(一个指针,指向分配而来的内存); 12 } 13 new_hanlder global_handler = set_new_handler(0); 14 set_new_handler(global_handler); 15 if(global_handler) 16 { 17 (*global_handler)(); 18 } 19 else 20 { 21 throw std::bad_alloc(); 22 } 23 } 24 }
3、class专属版本处理,分配大小与class大小不一致的错误。
4、delete的时候,判断是否为null。
分类:
Effective C++
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理