Chapter 12: Dynamic Memory
Dynamic Memory
C++编写原则之一:对象由谁创建,就由谁释放
目前为止,所使用的所有对象都有着严格定义的生命周期。全局对象在程序启动时分配,在程序结束时销毁;局部自动对象,其生命周期在语句块内;局部static对象在第一次使用前分配,程序结束时销毁
C++支持动态分配对象。静态内存保存局部static对象、类static数据成员以及定义在任何啊函数农户之外的变量;栈内存用来保存定义在函数内的非static对象。除此之外,每个程序还有一个内存池,被称为自由空间或堆(heap)。程序用对来存储动态分配的对象。必须显式销毁
Dynamic Memory and Smart Pointer
shared_ptr
template
- make_shared
(args): 创建指向T类型的指针,args进行初始化(建议使用) - shared_ptr
p(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
- new
1 | int *pia = new int[get_size()]; // 方括号中必须是整型 |
- allocator
template
- allocator
a - a.allocate(n)
- a.deallocate(p, n): 释放T*类型p指向的动态数组,包含n个元素,与创建时相同,使用前需要使用destroy();
- a.construct(p, args)
- a.destroy(p)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 ZuowangDev's Blog!