前段时间,重写vector 时就曾经知道,内存分配和构造函数要分开,析构函数和释放内存要分开,但是没有当回事。今天忽然又意识到这个问题。所以了解了一下allocator类。
allocator 可以解决 new和delete在上述问题上的尴尬。
代码如下:
allocator<string > alloc; //分配string的alloctor对象
auto const p= alloc.allocate(10);//分配内存
auto q=p;
alloc.construct(q++,10,'c');//构造函数
alloc.construct(q++,"hi");
cout<<*p<<endl;
cout<<*q<<endl;
while(q!=p)
alloc.destroy(--q); //析构函数
alloc.deallocate(p,10); //释放内存