Dynamic Memory

C++编写原则之一:对象由谁创建,就由谁释放
目前为止,所使用的所有对象都有着严格定义的生命周期。全局对象在程序启动时分配,在程序结束时销毁;局部自动对象,其生命周期在语句块内;局部static对象在第一次使用前分配,程序结束时销毁
C++支持动态分配对象。静态内存保存局部static对象、类static数据成员以及定义在任何啊函数农户之外的变量;栈内存用来保存定义在函数内的非static对象。除此之外,每个程序还有一个内存池,被称为自由空间或堆(heap)。程序用对来存储动态分配的对象。必须显式销毁

Dynamic Memory and Smart Pointer

shared_ptr

template

  • make_shared(args): 创建指向T类型的指针,args进行初始化(建议使用)
  • shared_ptrp(q): p是q的copy,递增q中的计数器
  • p.unique(): 如果p.usr_count() == 1,则返回true
  • p.use_count(): 返回与p共享对象的智能指针数量

new + shared_ptr: 直接初始化

1
shared_ptr<int> p(new int(1024))

动态数组

new & allocator

  1. new
1
2
3
4
int *pia = new int[get_size()]; // 方括号中必须是整型
int *pia = new int[10]{1, 2, ...,10};
delete p;
delete [] pa;
  1. allocator

    template

  • allocator a
  • a.allocate(n)
  • a.deallocate(p, n): 释放T*类型p指向的动态数组,包含n个元素,与创建时相同,使用前需要使用destroy();
  • a.construct(p, args)
  • a.destroy(p)