int *p=new int[42]
或者
typedef int arrT[42];
int *p=new arrT;
注意:
释放动态指针:delete [] pa;
,最后一个元素首先被销毁
1.用unique_ptr管理动态数组
unique_ptr<int[]> up(new int[10]);
up.release();
2.用shared_ptr管理指针,要定义删除器;当访问元素时,用sp.get()可以获得sp中保存的指针
shared_ptr<int> sp(new int[10],[](int *p){delete[] p;});
sp.seset();
要解决的问题:在创建对象之前预先分配大块的存储空间肯能会导致存储空间的浪费(数组中元素的个数n
# include
allocator<striing> alloc;
auto const p=alloc.allocator(n);
auto q=p;//q指向最后构造元素之后的位置(未构造内存)
alloc.construct(q++,10,'x');//对于未构造内存,只能使用construct构造元素(不能用元素类型的构造函数,只能拷贝)
while(q!=p)
alloc.destroy(--q);//用完对象后要销毁
alloc.dealocate(p,n);//释放内存
a.deallocate(p,n) | 释放从指针p中地址开始的内存 |
---|---|
a.construct(p,args) | 在p指向的内存中构建一个对象 |
a.destory( p ) | 对p指向的对象执行析构函数 |
a.construct(p,args) | 在p指向的内存中构建一个对象 |
拷贝填充未初始化内存:
auto p=alloc.allocate(vi.size()*2);
auto q=uninitialized_copy(vi.begin(),vi.end(),p);
uninitialized_fill_n(q,vi.size(),42);