码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Effective C++改善程序与设计的55个具体做法 8. 定制new 和 delete


    条款49: 了解 new-handler 的行为

    set new handler 允许客户指定一个函数,在内存分配无法获得满足时被调用。

    Nothrow new 是一个颇为局限的工具,因为它只适用于内存分配;后继的构造函数调用还是可能抛出异常。

    个人理解:set_new_handler的参数是个指针,指向operator new无法分配足够内存时该被调用的函数,其返回值也是个指针,指向set_new_handler被调用前正执行的那个new-handler函数

    条款 50: 了解 new 和 delete 的合理替换时机

    许多理由需要写个自定的 new 和 delete ,包括改善效能、对 heap 运用错误进行调试、收集 heap 使用信息。

    1. 有以下情况时可能需要替换编译器提供的operator new和operator delete
    2. 1. 用来检测运行上的错误
    3. 2. 为了强化效能
    4. 3. 为了收集使用上的统计数据
    5. 4. 为了检测运用错误
    6. 5. 为了收集动态分配内存使用统计信息
    7. 6. 为了增加分配和归还速度
    8. 7. 为了降低缺省内存管理器代码的空间额外的开销
    9. 8. 为了弥补缺省分配器中的非最佳齐位
    10. 9. 为了相关对象成簇集中
    11. 10. 为了获得非传统行为

    条款 51: 编写 new 和 delete 时需固守常规

    operator new 应该内含一个无穷循环,并在其中尝试分配内存,如果它无法满足内存需求,就该调用 new-handler。它也应该有能力处理0 bytes 申请。 Class专属版本则还应该处理"比正确大小更大的(错误)申请。

    operator delete 应该在收到 null 指针时不做任何事。 Class 专属版本则还应该处理"比正确大小更大的(错误)申请"。

    条款 52: 写了 placement new 也要写 placement delete

    当你写一个 placement operator new ,请确定也写出了对应的 placement operator delete。如果没有这样做,你的程序可能会发生隐微而时断时续的内存泄漏。

    当你声明 placement new 和 placement delete,请确定不要无意识(非故意)地遮掩了它们的正常版本。

    个人理解:重载了内存分配函数,也需要重载内存释放函数。这样资源才能被正确的回收。

  • 相关阅读:
    题解0014:信奥一本通1472——The XOR Largest Pair(字典树)
    编译器一日一练(DIY系列之总结)
    [贪心算法]java解决背包问题
    量化风控的贷前实操课—详解的规则调优
    java计算机毕业设计ssm基于JAVA的网上购物系统-商城购物网站
    【2022】【论文笔记】基于Rydberg原子Antenna的——
    DayDayUp:计算机技术与软件专业技术资格证书之《系统集成项目管理工程师》课程讲解之项目信息文档管理与配置管理
    【K&C-第3篇】转向几何设计
    【AWS SMB】关于AWS 中小型企业 (SMB) 能力介绍及注意事项
    RustChinaConf 2024(Rust中国大会2024)号集令
  • 原文地址:https://blog.csdn.net/weixin_35762621/article/details/125881366
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号