#include <iostream>
using namespace std;
//容器的空间配置器allocator
//做四件事情:内存开辟与释放 对象构造与析构
//定义容器的空间配置器,和C++标准库的allocator实现一样
template<typename T>
struct Allocator
{
T* allocate(size_t size)//负责内存开辟
{
return (T*)malloc(sizeof(T) * size);
}
void deallocate(void *p)//负责内存释放
{
free(p);
}
void construct(T *p, const T &val)//负责对象构造
{
new (p) T(val);//定位new
}
void destroy(T *p)//负责对象析构
{
p->~T();//~T()代表了T类型的析构函数
}
};
//容器底层,内存开辟与释放,对象构造与析构,都通过allocator空间配置器;来实现
template<typename T, typename Alloc = Allocator<T>>
class vector
{
public:
vector(int size = 10)
{
//需要把内存开辟和对象构造分开处理
//_first = new T[size];
_first = _allocator.allocate(size);
_last = _first;
_end = _first + size;
C++复习之容器空间配置器allocator的实现
最新推荐文章于 2023-10-09 15:40:03 发布
本文详细探讨了C++中allocator的概念,作为容器内部管理内存的主要工具,allocator如何实现内存分配和释放,以及其在不同容器中的应用。
摘要由CSDN通过智能技术生成