Chapter 12. Dynamic Memory
非配在静态内存的对象由编译器自动创建和销毁
静态内存:保存局部static对象,类static数据成员以及任何函数之外的变量。static对象在使用之前分配,程序结束销毁。
栈内存:保存定义在函数内的非static对象。栈对象仅在其定义的程序块运行时才存在。
自由空间(堆):存储动态分配的对象(在程序运行时分配的对象),动态对象的生存周期由程序来控制。当动态对象不再使用时,我们的代码必须显示销毁它们。
每个shared_ptr都有一个关联的计数器,通常称其为引用计数。拷贝一个shared_ptr,计数器都会增加。将一个shared_ptr赋予另一个shared_ptr会递增赋值号右侧shared_ptr的引用计数,而递减左侧shared_ptr的引用计数。如,
1、用一个shared_ptr初始化另一个shared_ptr。
2、将它作为参数传递给一个函数。
3、作为函数的返回值。
计数器递减
1、给shared_ptr赋予一个新值。
2、shared_ptr被销毁。
对于一块内存,shared_ptr类保证只要有任何shared_ptr对象引用它,它就不会被释放掉。
如果你将shared_ptr存放于一个容器中,而后不需要全部元素,而只使用其中一部分,记得使用erase删除不在需要的那些元素。
动态内存的三个原因:
1、程序不知道自己需要使用多少对象。
2、不知道所需要对象的准确类型。
3、程序需要在多个对象之间共享数据。
432

浙公网安备 33010602011771号