设为首页 加入收藏

TOP

4.3.2 new和delete运算符
2013-10-07 12:26:32 来源: 作者: 【 】 浏览:64
Tags:4.3.2 new delete 运算

4.3.2  new和delete运算符

假设某个double变量需要空间。我们可以定义一个指向double类型的指针,然后在运行时再请求分配内存。这项任务可以在下面的语句中用new运算符来完成:

  1. double* pvalue = NULL;          // Pointer initialized with null  
  2. pvalue = new double;    // Request memory for a double variable 

现在是复习"所有指针都应该初始化"这条原则的好时机。动态使用内存通常涉及大量四处漂浮的指针,因此确保它们不包含虚假值非常重要。如果指针没有包含合法的地址值,我们就应该设法将其设置为0。

前面第二行代码中的new运算符应该返回自由存储器中分配给double变量的内存地址,该地址被存入到指针pvalue中。之后,使用前面学过的间接运算符,我们可以通过指针pvalue来引用那个double变量。例如:

  1. *pvalue = 9999.0; 

当然,系统或许没有分配我们请求的内存,原因可能是自由存储器中的内存已经用光,或者自由存储器由于前面的使用而破碎-- 即没有足够的连续字节提供给需要获得空间的变量。不过,我们不必过多担心这一点。在ANSI C++(www.cppentry.com)标准中,如果系统因故不能分配内存,new运算符将抛出一个异常,从而使程序终止。异常是C++(www.cppentry.com)中报告错误的机制,我们将在第6章学习异常。

new创建的变量也可以初始化。以前面new分配的double变量为例,其地址存储在pvalue中,我们可以用下面这条语句,在创建该变量的同时将其初始化为999.0:

  1. pvalue = new double(999.0);         // Allocate a double and initialize it 

当我们不再需要动态分配的某个变量时,可以用delete运算符将其占用的内存释放到自由存储器中:

  1. delete pvalue;          // Release memory pointed to by pvalue 

这样将确保这块内存以后可以被另一个变量使用。如果我们不使用delete,随后又在pvalue指针中存入一个不同的地址值,那么将无法再释放这块内存,或使用其包含的变量,因为我们失去了访问该地址的途径。这种情况被称为内存泄漏-- 特别是出现在用户程序中的时候。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Visual C++ 2008入门经典 目录 下一篇4.3.1 堆的别名-- 自由存储器

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: