Item 36. Class-Specific Memory Management

在类中声明operator new 和 operator delete 成员就可以实现类自己的内存分配与管理。
class Handle {
  public:
    //...
    void *operator new( size_t );
    void operator delete( void * );
    //...
};
//...
Handle *h = new Handle; // uses Handle::operator new
//...
delete h; // uses Handle::operator delete

这样对于Handle的子类需要重载operator new 和 operator delete

class MyHandle : public Handle {
    //...
    void *operator new( size_t );
    void operator delete( void *, size_t ); // note 2nd arg
    //...
};
//...
Handle *h = new MyHandle; // uses MyHandle::operator new
//...
delete h; // uses MyHandle::operator delete

------------------------------------------------------
一个误解的概念:使用new和delete意味着使用heap内存
对于全局的那个operator new 和 operator delete,事实确实如此。既然operator new 和 operator

delete 都可以自定义,因此operator new 分配的内存就可以来自heap,静态分配的内存块,标准的容

器等。如下例所示:
struct rep {
    enum { max = 1000 };
    static rep *free; // head of freelist
    static int num_used; // number of slots used
    union {
        char store[sizeof(Handle)];
        rep *next;
    };
};
static rep mem[ rep::max ]; // block of static storage
void *Handle::operator new( size_t ) {
    if( rep::free ) { // if something on freelist
        rep *tmp = rep::free; // take from freelist
        rep::free = rep::free->next;
        return tmp;
    }
    else if( rep::num_used < rep::max ) // if slots left
        return &mem[ rep::num_used++ ]; // return unused slot
    else // otherwise, we're...
        throw std::bad_alloc(); // ...out of memory!
}
void Handle::operator delete( void *p ) { // add to freelist
    static_cast<rep *>(p)->next = rep::free;
    rep::free = static_cast<rep *>(p);
}

转载于:https://www.cnblogs.com/wuwuwu/archive/2005/04/17/6335331.html

Item 36. Class-Specific Memory Management相关推荐

  1. Memory Management in AIR / AS3 / Flash Garbage Collection.

    Memory management and garbage collection in Flash Player is a well debated topic. Some think that th ...

  2. Java (JVM) Memory Model – Memory Management in Java

    原文地址:http://www.journaldev.com/2856/java-jvm-memory-model-memory-management-in-java Understanding JV ...

  3. 异构内存管理 Heterogeneous Memory Management (HMM)

    https://www.kernel.org/doc/html/latest/vm/hmm.html 目录 异构内存管理 (HMM) 使用特定于设备的内存分配器的问题 I/O 总线.设备内存特性 共享 ...

  4. 内存管理:Linux Memory Management:MMU、段、分页、PAE、Cache、TLB

    目录 Linux Memory Management Memory Address Need for Virtual Addressing Address Translation Address Tr ...

  5. Memory Management Concepts overview(内存管理基本概念)

    目录 Concepts overview Virtual Memory Primer Huge Pages Zones Nodes Page cache Anonymous Memory Reclai ...

  6. 《MIT JOS Lab2: Memory Management》实验报告

    目录 0  准备文件 1  物理页管理 1.1 boot_alloc( )函数 1.2 mem_init ( )函数 1.2.1 函数中用到的 PageInfo 结构 1.2.2 初始化分配首页 1. ...

  7. 2022-3-16 MIT 6.828 Lab 2: Memory Management | Part 3: Kernel Address Space | Exercise 5

    Exercise 5. Fill in the missing code in mem_init() after the call to check_page(). Your code should ...

  8. [翻译] - Inside SQL Server 2000's Memory Management Facilities

    原文地址:Inside SQL Server 2000's Memory Management Facilities     翻译:RicCC Ken Henderson     Microsoft ...

  9. Operating System Concepts--chap9 Memory Management;

    为什么80%的码农都做不了架构师?>>>    这一章节的memory management内容覆盖从bare-machine approach到paging和segmentatio ...

最新文章

  1. MySQL中的重做日志(redo log),回滚日志(undo log),以及二进制日志(binlog)的简单总结...
  2. NYOJ 56 阶乘因式分解(一)
  3. ajax给data赋值,vue 2.0 methods 里ajax生成的数据,怎么赋值给data
  4. CFileDialog
  5. php 判断美国zip code
  6. 粗谈MySQL事务的特性和隔离级别
  7. js——window.open用法
  8. js错误: XXX变量 is not a function
  9. KVC在定义Model类中的妙用
  10. 可怕!让无数女明星下海的换脸术来了,Facebook推出视频换脸功能!
  11. stagefright_StageFright:Android操作系统中最易受攻击的错误
  12. 易优cms eyoucms登陆后台提示验证码错误
  13. java号码归属地接口,免费API-手机号码归属地接口
  14. DirectX 3D图形
  15. 架构漫谈:什么是架构? - 转
  16. HDU 6164 Dying Light(计算几何)
  17. 保存图片到相册并打开微信扫一扫
  18. 【win10系统重装】
  19. 【Sofice小司笔记】2 算法与数据结构,各类基础及常用高级数据结构、各种搜索方法、动态规划、字符串、数论、编码学、排序等,大部分都基于java实现
  20. 数据时代做好知识主人-自创文章

热门文章

  1. 网页快照是什么?对SEO优化有什么作用?
  2. java 找不到工程文件_类加载器找不到文件求帮助
  3. 考c语言三级需要什么软件,全国计算机三级网络技术上机考C语言的软件是什么哈?...
  4. php适配器模式应用,什么是适配器模式,它有哪些应用场景
  5. 简单的PHP和MYSQL做投票系统_php mysql简单投票系统
  6. python查询mysql 乱码_python查询mysql中文乱码问题
  7. 赛码浪潮笔试题库软件实施岗位_2020年浪潮软件类笔试题
  8. 格式化时间中HH:mm:ss与hh:mm:ss的区别
  9. quot;正统quot;函数式编程 两个规则
  10. Recovering unassigned shards on elasticsearch 2.x——副本shard可以设置replica为0在设置回来...