动态内存
到现在为止,我们所有的计划,我们只有尽可能多的可用内存,我们宣布我们的变量,所有这些的大小来确定的源代码中,执行程序前。 但是,如果我们需要一个变量的内存量,可以在运行时才能确定? 例如,在我们需要的情况下,一些用户输入来确定所需的存储空间量。答案是动态内存 ,其中C + +集成运算符new和 delete。
运营商新的和新的[]
为了请求动态内存,我们使用新的操作员。 新的随后的数据类型的说明符,并且如果一个以上的元素的序列是必需的,其中有多少在方括号[]。 它返回一个指向新分配的内存块的开始。 它的形式是:指针=新型
指针=新型number_of_elements]
第一个表达式用于分配内存以包含一个单一的元素类型类型 。 第二个是用来分配一个块(数组)的元素类型的类型 ,其中number_of_elements是一个整数值,代表这些。 例如:
|
|
在这种情况下,系统动态分配空间int类型的五行,并返回一个指针,该序列的第一个元素,这是分配鲍比 。 因此,现在,鲍比指向一个有效的内存块int类型的五行与空间。

访问的第一个元素可以由鲍比指出与表达鲍比[0]或表达式*鲍比 。 两者是等价的一节中的有关指针已经解释了。 可以访问与 Bobby的第二个元素[1]或*(鲍比+1)等等......
你可以想声明一个正常的数组和动态内存分配的指针,正如我们刚才做的区别。 最重要的区别是,一个数组的大小是一个恒定值,这就限制了它的尺寸,我们决定于设计的程序,在执行前的那一刻,而动态内存分配的期间,使我们能够分配内存程序的执行(运行时)使用的任何变量或常量的值作为它的大小。
我们的程序所要求的动态内存分配系统内存堆。 然而,计算机存储器是一种有限的资源,并且它可以被用尽。 因此,重要的是有一些机制来检查,如果我们的请求分配内存是成功还是失败。
C + +提供了两个标准的方法来检查,如果分配成功:
其一是通过处理异常。 使用这种方法抛出bad_alloc的类型的一个例外是当分配失败。 例外的是一个功能强大的C + +的功能在这些教程稍后解释。 但是现在你应该知道,如果抛出此异常,它不是由一个特定的处理,终止程序执行。
这种异常的方法是使用新的默认的方法,是一个像在声明中使用:
|
|
另一种方法被称为抛出异常 ,会发生什么,当它被用来当内存分配失败,而不是抛出一个bad_alloc异常或终止程序,返回的指针由新是一个空指针,程序继续执行。
这种方法可以通过使用一种特殊的称为抛出异常的对象,指定在头文件<new>宣布, 新的论点:
|
|
在这种情况下,如果此块内存分配失败,失败可以通过检查检测到,如果巴比了一个空指针值:
|
|
此nothrow的方法不是例外方法需要更多的工作,因为返回的值进行检查后,每内存分配,但我会用它在我们的例子,因为它简单。 总之,这种方法可以变得单调乏味的大型项目,在异常的方法通常是首选。 异常的方法将在后面详细说明在本教程中。
运营商删除,并删除[]
由于动态存储器的必要性通常仅限于特定的时刻,在一个程序中,一旦不再需要它应该被释放,以便内存再次变为可用其他请求动态内存。 这是一个目的的 delete运算符,其格式为:
|
|
应的第一个表达式用来删除分配给一个元素,而第二个元素的数组分配的内存的内存。
必须是一个指针作为参数传递的值删除以前分配的内存块新的 ,或一个空指针(空指针的情况下, 删除不产生影响)。