常规的new 和 delete

当需要内存时,可以使用new申请内存,但在用完内存时应当使用delete 去归还内存,以防止内存泄漏,具体使用方案见下面代码:

int* ps = new int ; // 使用new 申明变量空间
...
...
delete ps ; '// delete 删除所申明的变量空间

上述代码将删除ps 指针指向的内存空间,但不会删除指针本身,即仍然可以使用该指针去指向其他int 类型的变量。new 和 delete 一定需要成对的使用否则极易发生内存泄漏。

  • 注意:不要释放已经释放完毕的内存块,C++标准指出,这样做的结果将会不确定。
  • 注意:delete只能释放通过new分配的内存。 例子见下列代码:
int* ps = new int ;
delete ps ; // ok
delete ps ; // 重复释放 not ok
int jugs = 5 ;
ps = &jugs ;
delete ps ; // delete 只能释放由new 分配的内存空间 not ok

使用new 来创建动态数组

使用new 创建数组的方式很简单,即将数组元素的类型和数目告诉new即可,例如:要创建包含10个int元素的数组

int* psome = new int [10] ;

指针psome指向数组的第一个元素地址。

当程序使用new 分配变量空间,在变量使用完毕后应当使用delete 去释放该空间

delete [] psome ;

方括号代表删除的内容为数组空间,而不是单个元素空间。

类和对象中的new 和 delete

构造函数创建完对象之后,程序跟踪对象,直到其过期为止。当对象过期时,程序将调用析构函数去完成清理工作。当构造函数中有new 申明的变量时,析构函数要是用delete去清空相应对象,反之当构造函数中没有new申明的变量时,析构函数则不需要做任何其他操作。举个简单的例子:

class string
{
private :char* str ; // 准备在构造函数中用new申明空间
public :string() {str = new string ;} // 默认构造函数~string() {delete str ;}  // 默认析构函数
}

类和对象new 和 delete

使用动态分配为对象提供空间,需要调用构造函数,当程序不需要该对象的时候,使用delete删除它(此时相当于显示的调用了该对象的析构函数,删除该对象内部动态分配空间的子对象)。

具体程序如下所示:

class Act{...} ;
int main()
{Act* pt = new Act ;...delete pt ; // 同时隐式的调用了Act中的析构函数,以删除其内部动态分配的子对象。
}

new delete 详解相关推荐

  1. update和delete详解

    update和delete详解 1. 修改 update(DML) 语法格式:update 表名 set 字段名1=值1,字段名2=值2,字段名3=值3... where 条件; 注意:没有条件限制会 ...

  2. mysql用delete详解_MySQL DELETE语法使用详细解析

    该文章转自:http://www.jb51.net/article/35071.htm 以下的文章主要描述的是MySQL DELETE语法的详细解析,首先我们是从单表语法与多表语法的示例开始的,假如你 ...

  3. MySQL 清空表(truncate)与删除表中数据(delete) 详解

    删除表信息的方式有两种 : truncate table table_name; delete * from table_name; 注 : truncate操作中的table可以省略,delete操 ...

  4. Http:Get、Post、Put、Delete、Head、Options详解

    2019独角兽企业重金招聘Python工程师标准>>> 一.概述 Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是 ...

  5. ASP.NET MVC 5 学习教程:Details 和 Delete 方法详解

    ASP.NET MVC 5 学习教程:Details 和 Delete 方法详解 原文 ASP.NET MVC 5 学习教程:Details 和 Delete 方法详解 在教程的这一部分,我们将研究一 ...

  6. 容器编排技术 -- Kubernetes kubectl delete 命令详解

    容器编排技术 -- Kubernetes kubectl delete 命令详解 1 kubectl delete 2 语法 3 示例 4 Flags kubectl delete 通过配置文件名.s ...

  7. docker常用命令详解

    docker常用命令详解 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备忘记录下来. 根据自己的理解,总的来说分为以下几种: Doc ...

  8. HTTP协议详解(真的很经典)

    转自:http://blog.csdn.net/gueter/archive/2007/03/08/1524447.aspx Author :Jeffrey 引言 HTTP是一个属于应用层的面向对象的 ...

  9. k8s nodeport无法访问_k8s学习之service详解

    1.概述 通过Deployment来创建一组Pod来提供具有高可用性的服务.每个Pod都会分配一个单独的Pod IP,却存在如下两问题: 1.pod ip仅仅集群内部可见的虚拟IP,外部无法访问 2. ...

最新文章

  1. IOS版添加phonegap-视频播放插件教程
  2. python自动化办公 书籍-python自动化办公知识点整理汇总
  3. csrf攻击防御 php,Yii2.0防御csrf攻击方法
  4. 《React Native移动开发实战》一一3.4 完善商品列表——ListView组件
  5. [leetcode] Restore IP Addresses
  6. SAP Spartacus的double maintenance -使用Cherrypick进行维护工作
  7. 组件库实战 | 教你如何设计Web世界中的表单验证
  8. [转载]基于TFS实践敏捷-修复Bug和执行代码评审
  9. 2059 - authentication plugin 'caching_sha2_password' -navicat连接异常问题解决
  10. 前端职业规划 - 前端技术专家们的生死书
  11. java接口自动化(一) - 接口自动化测试整体认知 - 开山篇(超详解)
  12. 设计模式----单例模式(c++实现)
  13. 微信小程序实现datamatrix(dm)码
  14. 只需三步!查看笔记本电脑连接的WiFi密码
  15. 第六章-网络可靠性设计
  16. SQL语句记了又忘?常用的SQL语句,配语句和图解超详细o
  17. 调用后台接口返回报错前端隐藏提示_腾讯社交联盟广告
  18. 二进制在计算机内是如何运作的
  19. 响ASO优化的九大因素
  20. 接口测试 - 构造伪数据/测试数据(Faker)

热门文章

  1. 小学计算机合作教学设计,对小组合作模式下信息技术与小学数学课程的主题式整合的探索...
  2. 基于安卓Android的健身app系统
  3. win10 应用商店崩溃 错误代码 0x80131500
  4. A ZJH and Monkeys 第十四届华中科技大学程序设计竞赛
  5. Eureka 一直刷 Running the evict task with compensationTime 0ms
  6. 项目范围管理:项目范围确认
  7. Linux有哪些版本
  8. 8大爱的方式让您的婚礼绿色环保
  9. 微信公众号发送模版消息
  10. 微信怎么发文字朋友圈?简单快捷的方法,只需1分钟