1. 默认的new和delete操作符
new和delete是和c里面的mlloc和free是一样的,在堆中创建空间。堆中创建的,都要自己释放。
C中
void test()
{
  int *p=(int *)malloc(sizeof(int));
  if(p!=NULL)
  {
    free(p);//free完p后,p不会自动变为NULL
    //malloc出来的空间,可以使用delete p。
    p=NULL;
  }
  int *array_p=(int *)malloc(sizeof(int)*10);
  for(int i=0;i<10;i++)
  {
    array_p[i]=1;
  }
//...
}
C++中
void test2()
{
  int *p=new int;
  if(p!=NULL)
  {
    delete p;
    //也可以使用free(p)
    p=NULL;
  }
  int *array = new int[10];
  //new int(10);开辟一个int,赋值为10
  if(array!=NULL)
  {
    delete[] array;//最好写成这样,防止某些编译器不支持
  }
}
//malloc 和free是函数,标准库,stdlib.h standwardLibrary
//new和delete是C++的操作符,不同free函数需要压栈(类似在栈中开辟内存干活)和出栈(类似释放栈中的内存)。
注意:
使用malloc开辟内存,如果sizeof(A),类型A是有有参构造函数的话,是不会执行的,所以A只能写一个initial方法来初始化。
使用new,例如使用A *a = new a(10,10);那么是可以执行构造函数的。
使用free并不能触发对象的析构函数,所以要写一个dispose之类的函数来释放a中,指针指向堆的内存。
使用delete能触发析构函数。

2. 重写new和delete操作符(一般很少这样玩)
class A
{
  A(int a)
  {

  }
  //重载new操作符,依然会触发A的构造函数。调用new A(10)
  void* operator new(size_t size)//size_t实际上按sizeof(int)大小取的
  {
    return malloc(size);
  }  
  //重载delete操作符,依然会触发A的析构函数。调用delete a
  void operator delete(void *p)
  {
    if(p!=NULL){
      free(p);
    }
  }

  void* operator new[](size_t size)//size_t实际上按sizeof(int)大小取的
  {
    return malloc(size);
  }

  void operator delete[](void *p)
  {
    if(p!=NULL){
      free(p);
    }
  }
}
int mian
{
  A*ap;
  ap->operator new(sizeof(A));
}

3.new[]和delete[]也是可以重载的

C++学习笔记4_new和delete的更多相关文章

  1. CUBRID学习笔记 45 REPLACE DELETE MERGE 教程

    c#,net,cubrid,教程,学习,笔记欢迎转载 ,转载时请保留作者信息.本文版权归本人所有,如有任何问题,请与我联系wang2650@sohu.com . 过错 ------ 官方文档是英文的, ...

  2. C++学习笔记-new与delete

    C++新增了new和delete关键字,用来开辟内存,对应的就是C语言的malloc和free 对比new/delete和malloc/free malloc和free是库函数,以字节为单位申请堆内存 ...

  3. 吴裕雄--天生自然MySQL学习笔记:MySQL DELETE 语句

    可以使用 SQL 的 DELETE FROM 命令来删除 MySQL 数据表中的记录. 可以在 mysql> 命令提示符或 PHP 脚本中执行该命令. 语法 以下是 SQL DELETE 语句从 ...

  4. [原创]java WEB学习笔记79:Hibernate学习之路--- 四种对象的状态,session核心方法:save()方法,persist()方法,get() 和 load() 方法,update()方法,saveOrUpdate() 方法,merge() 方法,delete() 方法,evict(),hibernate 调用存储过程,hibernate 与 触发器协同工作

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  5. 【SQL Server学习笔记】Delete 语句、Output 子句、Merge语句

    原文:[SQL Server学习笔记]Delete 语句.Output 子句.Merge语句 DELETE语句 --建表 select * into distribution from sys.obj ...

  6. Hadoop入门学习笔记---part4

    紧接着<Hadoop入门学习笔记---part3>中的继续了解如何用java在程序中操作HDFS. 众所周知,对文件的操作无非是创建,查看,下载,删除.下面我们就开始应用java程序进行操 ...

  7. SQLServer学习笔记系列1

    一.前言 一直自己没有学习做笔记的习惯,所以为了加强自己对知识的深入理解,决定将学习笔记写下来,希望向各位大牛们学习交流! 不当之处请斧正!在此感谢!这边就先从学习Sqlserver写起,自己本身对数 ...

  8. Hadoop学习笔记—18.Sqoop框架学习

    一.Sqoop基础:连接关系型数据库与Hadoop的桥梁 1.1 Sqoop的基本概念 Hadoop正成为企业用于大数据分析的最热门选择,但想将你的数据移植过去并不容易.Apache Sqoop正在加 ...

  9. Oracle之PL/SQL学习笔记

    自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整理了一下,给大家分享,有不足之处还望大家 ...

随机推荐

  1. redis 漏洞造成服务器被入侵-CPU飙升

    前言   前几天在自己服务器上搭了redis,准备想着大展身手一番,昨天使用redis-cli命令的时候,10s后,显示进程已杀死.然后又试了几次,都是一样的结果,10s时间,进程被杀死.这个时候我还 ...

  2. [WP8.1]给Pivot的Header加上颜色

    先上个效果图 以前想实现这个给Pivot加颜色时只找到8的,通过参考8的实现方式,8.1的实现如下,在Pivot的样式上做一些修改,如下图的红框处 另外如果要改Pivot的Header里文字的颜色又要 ...

  3. Scala 数组和List

    Scala 数组和List: import scala.collection.mutable.ArrayBuffer import scala.collection.mutable.Buffer ob ...

  4. Python3 学习笔记之 IDLE

    IDLE: IDLE是Python标准发行版内置的一个简单小巧的IDE,包括了交互式命令行.编辑器.调试器等基本组件,足以应付大多数简单应用. 基本操作: File->New File 新建立p ...

  5. MongoDB 学习笔记之 WriteConcern

    WriteConcern: 转载:MongoDB WriteConcern(写关注)机制 http://www.ywnds.com/?p=3688&viewuser=40 MongoDB部署模 ...

  6. PHP的bcmath编译安装

    问题描述:zabbix编译安装时PHP条件检查失败,如下图: 解决办法: 1.PHP自带bcmath扩展模块,可直接进行编译安装. [root@localhost etc]# cd /usr/loca ...

  7. 利用npm安装/删除/查看包信息

    查看远程服务器上的包的版本信息 npm view webpack version //查看npm服务器上包webpack的最新版本 npm view webpack versions //查看服务器上 ...

  8. C# 常见面试问题汇总

    1.c#垃圾回收机制 从以下方面入手展开:  1.压缩合并算法   2.代的机制  3.GC调用终结器 Garbage Collector . NET采用了和Java类似的方法由CLR(Common ...

  9. 最简单的ArcGIS Engine应用程序(中)

    上一篇中只能添加代码中指定的shp文件(最简单的ArcGIS Engine应用程序(上)) 为了让用户可以浏览磁盘加载指定的shp文件,需做一下调整. 从工具箱往窗体上添加一个OpenFileDial ...

  10. 使用jmeter进行压力测试入门讲解

    1.下载安装jmeter 略 我这里放上5.1版本的,有需要可以下载 链接:https://pan.baidu.com/s/1xRZZmTY4do1oDU_xPit94Q&shfl=share ...