前言

new和delete是C++中用来动态管理内存分配的运算符,其用法较为灵活。如果你对它们的几种不同用法感到困惑,混淆,那么接着看下去吧。

功能一:动态管理单变量/对象空间

下面例子使用new为单个变量/对象开辟空间:

 // 创建一个指向整型元素的指针pi,其所指对象为整数100。
int *pi = new int(); // 创建一个指向字符串元素的指针ps,其所指对象为字符串"ssssssssss"。
string *ps = new string(, 's');

对于开辟的单变量/对象空间,我们只能通过new操作符返回的指针来控制,而不能通过变量名/对象名。另外,如果上述定义式右边的 () 为空,则对变量/对象进行值初始化,而如果连 () 都没有,则进行默认初始化。(这里假定你已清楚值初始化和默认初始化的区别)

当这部分空间使用完毕,应当使用delete将其回收,上述例子对应回收语句如下:

 delete pi;
pi=NULL; delete ps;
ps=NULL;

需要说明的是:1. 每个new都必须对应一个delete 2. 一个内存空间只能被delete一次   (下面这种功能实现也要满足这两点)

功能二:动态管理数组空间

  下面例子使用new为数组开辟空间:

 // 创建一个"数组指针"pia,pia将指向一个含有10个整型元素的数组的第一个元素。
int *pia = new int[]; // A是类名
// 创建一个"数组指针"pib,pib将指向一个含有10个A类对象的数组的第一个对象。
A *pib = new A[];

对于开辟的数组空间,我们只能通过new操作符返回的指针来控制,而不能通过数组名。另外,如果上述定义式右边末尾加上空 (),则数组进行值初始化,否则数组元素是未定义的(如本例)

  当这部分空间使用完毕,应当使用delete将其回收,上述例子对应回收语句如下:

 delete [] pia;
pia = NULL; delete [] pib;
pib = NULL;

需要特别注意delete右边的那个[],如果遗漏,将很可能导致难以预料的错误。

最新文章

  1. 参考XML操作类
  2. oracle中的常用语句
  3. VMware中Ubuntu忘记密码的解决办法
  4. linux下安装apache2.2.27
  5. 设置mysql数据库的密码
  6. 《Java TCP/IP Socket 编程 》读书笔记之十一:深入剖析socket——TCP套接字的生命周期
  7. A. Night at the Museum Round#376 (Div. 2)
  8. ●UOJ 131 [NOI2015] 品酒大会
  9. leetcode刷题笔记342 4的幂
  10. 20175221曾祥杰 实验二《Java面向对象程序设计》
  11. VisualStudio移动开发(C#、VB.NET)Smobiler开发平台——BarcodeView控件的使用方式,.Net移动开发
  12. redis 安装配置学习笔记
  13. linux中crw brw lrw等等文件属性是什么
  14. idHTTP 向网站发送json格式数据
  15. Sql保留两位小数方法
  16. 【模板/经典题型】min-max容斥
  17. qtftp 客户端
  18. Swoole 结合TP5搭建文字直播平台
  19. 文本属性和字体属性,超链接导航栏案例 background
  20. codeforces 782B - The Meeting Place Cannot Be Changed

热门文章

  1. 去掉A标签的虚线框
  2. ASP.NET MVC之Html.RenderAction(无操作方法 传参数)
  3. xaf 修改主页logo
  4. hibernate中一些属性对操作的影响
  5. Apache、Tomcat负载均衡与集群
  6. HDOJ 5289 Assignment 单调队列
  7. VisualStudio“在查找预编译头使用时跳过"解决方案
  8. java 清除 bom
  9. httpclient4.5 的一些细节
  10. python操作word