9 C++对数据内存的管理方式
C++有三种管理数据内存的方式:自动存储,静态存储和动态存储。C++ primer plus第四章做了简单的介绍
自动存储:在函数内部定义的常规变量使用自动存储空间,被称为自动变量,意味着他们在所属函数被调用时自动产生,在该函数结束时自动消亡。
换句话说,自动变量就是一个局部变量,其作用域就是包含它的代码块。
静态存储:整个程序执行期间都存在的存储方式。
是变量变为静态有两种方式:一种是在函数外面定义它;另一种是在声明变量是使用关键字static (实际使用在基本又在函数外面定义,又使用关键字static)
e.g: static double fee = 56.5;
上两种存储方式的关键在于:静态变量存在于程序的整个生命周期,自动变量则只是在特定函数(包括main)被执行时存在。
动态存储
new 和delete运算符则提供了一种比自动变量和静态变量都灵活的方法:我们可以在一个函数中new(分配一个内存),另外一个函数中把new出来的内存delete掉。
高级工具出现了,这就要求我们需要一定的技巧来掌握它。如果只new不delete,就会造成内存泄漏从而无法回收,后果可能很严重!
所以我们要养成习惯,同时使用new和delete运算符!
4.9 讲数组,结构,指针的组合,没啥特别的,一看就明白。
10. 数组的替代品
c++提供了两个模板类vector和array来代替数组。什么是模板类呢,估计后面讲到类的时候会讲,现在暂且不管。
vector:类似string类,是一种动态数组,可以在运行阶段设置vector对象的长度,可以在末尾附加新数据,也可以在中间插入新数据。使用的时候include <vector>,同时using namespace std。
声明vector:
vector<int> vi; // 声明一个不包含任何元素的int型的vector vi
vector<double> vd(n); //声明一个包含n个double元素的vector vd
vector功能强大,但效率比较低,如果需要是长度固定的数组,使用普通数组是更佳选择。
C++ 11 以后新增了模板类array,也需要using namespace std,同时include <array>。与数组一样,array对象长度固定,使用栈(静态内存分配),而不是堆,因此效率跟数组相同。
使用方式:
array<int, 5> ai;
array<double, 4> ad = {1.2, 2.1, 3.43, 4.3};
现在还看不出来array比数组有什么优势,但array既然是一个类,肯定提供了不少函数,所以要了解array的好处必须得学习它的函数了,这里留个记号,到时候好好学习
11. 总结
这章到此结束了,c++从这章开始由于多了指针,数组也变得有趣起来。总的来说这章还是定义比较多,需要理解的比较少,所以记下来以后用的时候慢慢体会吧