C++容器的内存分配
首先我们得了解C++如何通过new和delete调用构造和析构函数来分配空间。参考c++内存管理-new/delete
现在,我们来看在容器里面分配空间,容器是通过统一的接口std::allocator来做的,std::allocator调用的实质上是重载::operator new和::operator delete.
重载::operator new和::operator delete.
重载有两种方式
- 第一种是在类里面重载。
class Complex{
public:
static void* operator new(size_t size);
static void operator delete(void*, size_t size);
static void* operator new[](size_t size);
static void operator delete[](void*, size_t size);
};
- 第二类是直接在外部声明函数。
内存池
所谓的内存池就是指在malloc的时候我们分配多个对象,以单向链表的形式存储起来,然后我们只需要管理这个单向链表串起来的内存池就好了。我们使用一个Airplane的类来说明。
class Airplane{
private:
struct AirplaneRep{
unsigned long miles;
char type;
};