空间配置器的作用: (1)将对象构造和内存开辟进行分离。 (2)将对象析构和内存释放进行分离。
空间配置器的主要函数:
1.allocate:进行内存的开辟,底层调用的就是malloc。
2.deallocate:进行内存的释放,底层调用的就是free。
3.construct :使用定位new来负责给容器中的对象进行构造。
4.destroy:负责析构容器中的对象。p->~T()
。
空间配置器的简单实现:
template <typename T>
class Allocator {
public:
// 负责内存开辟
T* allocate(size_t size) {
return (T*)malloc(sizeof(T) * size);
}
// 负责内存释放
void deallocate(void* p) {
free(p);
}
// 既可以接收左值也可以接收右值
template <typename Ty>
void construct(T* p, Ty&& val) {
new (p) T(std::forward<Ty>(val));
}
// 对象析构
void destroy(T* p) {
p->~T(); // ~T() 代表了T类型的析构函数
}
};