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

posted @ 2016-01-21 18:03  Do.else  阅读(129)  评论(0)    收藏  举报