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. 如何增强VR的vection/self-motion?

    上一节讲到了vection是给玩家带来“移动感”的因素,它提供良好VR体验的关键之一.那么VR中我们一般用哪些方式来提供vection呢?1 首先来简单了解一下人体和空间相关的感知机制. 视觉线索 v ...

  2. 【每天一题】LeetCode 0020. 有效的括号

    开源地址:https://github.com/jiauzhang/algorithms 题目 /* * https://leetcode-cn.com/problems/valid-parenthe ...

  3. Spring Security 学习记录

    一.核心拦截器详细说明 1.WebAsyncManagerIntegrationFilter 根据请求封装获取WebAsyncManager 从WebAsyncManager获取/注册Security ...

  4. mpvue 页面预加载,新增preLoad生命周期

    存在的必要性:mpvue开发微信小程序,在页面跳转到新页面的过程中会有200ms左右的延迟,这个200ms如果用来请求新页面的接口,那么跳转到新页面或许已经渲染好了页面. 就是两种方式: 1.新页面跳 ...

  5. 洛谷P1613 跑路

    题目描述 小A的工作不仅繁琐,更有苛刻的规定,要求小A每天早上在6:00之前到达公司,否则这个月工资清零.可是小A偏偏又有赖床的坏毛病.于是为了保住自己的工资,小A买了一个十分牛B的空间跑路器,每秒钟 ...

  6. Integer类型与int的==比较

    前言 Java中有两种类型 基本类型 基本数据类类型存的是数值本身 引用类型 引用类型变量在内存放的是数据的引用 基本类型通过==比较的是他们的值大小,而引用类型比较的是他们的引用地址 正文 在一些特 ...

  7. Flask框架整个流程源码解读

    Flask框架整个流程源码解读 一.总的流程 运行Flask其本质是运行Flask对象中的__call__,而__call__本质调用wsgi_app的方法 wsgi_app方法 def wsgi_a ...

  8. EF通过导航属性取出从表的集合后,无法删除子表

    主从表是配了级联删除的,如果通过导航属性去除从表明细删除时将报错The relationship could not be changed because one or more of the for ...

  9. Hibernate HQL注入与防御(ctf实例)

    遇到一个hql注入ctf题    这里总结下java中Hibernate HQL的注入问题. 0x01 关于HQL注入 Hibernate是一种ORM框架,用来映射与tables相关的类定义(代码) ...

  10. RequireJS 插件

    网址:http://www.requirejs.cn/docs/api.html#i18n RequireJS的插件: Text:自动加载一些非js的文本文件. domReady:确保在Dom Rea ...