当我们 new 一个对象的时候,包含两个操作,首先 operator new 分配内存,再调用构造函数构造对象内容 但我们 delete 一个对象的时候,同样先调用析构函数,再调用 operator delete 释放内存? STL 将这个过程薄薄的包装了一下,实际上没优化? 配置器定义于 中, 中又包含 <stl_alloc.h> <stl_construct.h>? 内存配置由 alloc::allocate() 负责,内存释放由 alloc::deallocate() 负责 。
构造对象由 construct::construct() 负责,析构对象由 construct::destroy() 负责 ?
对应关系:
1.alloc::allocate() 调用 ::operator new
2.alloc::deallocate() 调用 ::operator delete
3. construct::construct() 调用 new(p) T1(value);
4.construct::destroy() 调用 p->~T();
//申请内存
pointer allocate(size_type n, const void* hint = 0)
{
T* tmp = (T*)(::operator new((size_t)(n * sizeof(T))));
//operator new 和new operator是不同的
if (!tmp)
cerr << "out of memory"<<endl;
return tmp;
}
//释放内存
void deallocate(pointer p)
{
::operator delete(p);
}
//构造
void construct(pointer p, const T& value)
{
new(p) T1(value);
}
//析构
void destroy(pointer p)
{
p->~T();
}
|