第四章 复合类型(4)

来源:互联网 发布:linux个人目录 编辑:程序博客网 时间:2024/05/16 16:12

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++从这章开始由于多了指针,数组也变得有趣起来。总的来说这章还是定义比较多,需要理解的比较少,所以记下来以后用的时候慢慢体会吧 


0 0
原创粉丝点击