请教内存池的处理问题,一般可以为每种类型给一个静态的内存池静态成员……
内存池的处理问题:
一般可以为每种类型(比如class A)定义一个静态的内存池成员(static pool alloc;),然后重载operator new 和operator delete。问题是这样处理后,不管在什么地方(什么模块)使用到该类型(class A)时,所有的动态对象都是调用重载后的operator new从同一个内存池里分配。
现在,如果我在class B中有一个成员A *m_pA;其中m_pA为一个链表,每个节点都动态分配,而我希望每个m_pA节点的内存都由pool管理,除了上面定义静态成员的做法之外,有什么别的更好的实现吗?
[解决办法]
你觉得上面方法不好的原因是什么?
可以专门定义一个类来管理内存。
[解决办法]
其实使用operator new/delete的主要目的是重用原来的new operator语法,改变new A的内存分配方式,这对class A的使用者可以是透明的。
现在你希望自定义部分A对象的内存分配方式,即是说你不需要改变系统内部的分配方式。那么可以直接写两个函数CreateA, DestroyA,用你愿意的方式创建/销毁A对象。