C++学习笔记4_new和delete
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的更多相关文章
- CUBRID学习笔记 45 REPLACE DELETE MERGE 教程
c#,net,cubrid,教程,学习,笔记欢迎转载 ,转载时请保留作者信息.本文版权归本人所有,如有任何问题,请与我联系wang2650@sohu.com . 过错 ------ 官方文档是英文的, ...
- C++学习笔记-new与delete
C++新增了new和delete关键字,用来开辟内存,对应的就是C语言的malloc和free 对比new/delete和malloc/free malloc和free是库函数,以字节为单位申请堆内存 ...
- 吴裕雄--天生自然MySQL学习笔记:MySQL DELETE 语句
可以使用 SQL 的 DELETE FROM 命令来删除 MySQL 数据表中的记录. 可以在 mysql> 命令提示符或 PHP 脚本中执行该命令. 语法 以下是 SQL DELETE 语句从 ...
- [原创]java WEB学习笔记79:Hibernate学习之路--- 四种对象的状态,session核心方法:save()方法,persist()方法,get() 和 load() 方法,update()方法,saveOrUpdate() 方法,merge() 方法,delete() 方法,evict(),hibernate 调用存储过程,hibernate 与 触发器协同工作
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- 【SQL Server学习笔记】Delete 语句、Output 子句、Merge语句
原文:[SQL Server学习笔记]Delete 语句.Output 子句.Merge语句 DELETE语句 --建表 select * into distribution from sys.obj ...
- Hadoop入门学习笔记---part4
紧接着<Hadoop入门学习笔记---part3>中的继续了解如何用java在程序中操作HDFS. 众所周知,对文件的操作无非是创建,查看,下载,删除.下面我们就开始应用java程序进行操 ...
- SQLServer学习笔记系列1
一.前言 一直自己没有学习做笔记的习惯,所以为了加强自己对知识的深入理解,决定将学习笔记写下来,希望向各位大牛们学习交流! 不当之处请斧正!在此感谢!这边就先从学习Sqlserver写起,自己本身对数 ...
- Hadoop学习笔记—18.Sqoop框架学习
一.Sqoop基础:连接关系型数据库与Hadoop的桥梁 1.1 Sqoop的基本概念 Hadoop正成为企业用于大数据分析的最热门选择,但想将你的数据移植过去并不容易.Apache Sqoop正在加 ...
- Oracle之PL/SQL学习笔记
自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整理了一下,给大家分享,有不足之处还望大家 ...
随机推荐
- redis 漏洞造成服务器被入侵-CPU飙升
前言 前几天在自己服务器上搭了redis,准备想着大展身手一番,昨天使用redis-cli命令的时候,10s后,显示进程已杀死.然后又试了几次,都是一样的结果,10s时间,进程被杀死.这个时候我还 ...
- [WP8.1]给Pivot的Header加上颜色
先上个效果图 以前想实现这个给Pivot加颜色时只找到8的,通过参考8的实现方式,8.1的实现如下,在Pivot的样式上做一些修改,如下图的红框处 另外如果要改Pivot的Header里文字的颜色又要 ...
- Scala 数组和List
Scala 数组和List: import scala.collection.mutable.ArrayBuffer import scala.collection.mutable.Buffer ob ...
- Python3 学习笔记之 IDLE
IDLE: IDLE是Python标准发行版内置的一个简单小巧的IDE,包括了交互式命令行.编辑器.调试器等基本组件,足以应付大多数简单应用. 基本操作: File->New File 新建立p ...
- MongoDB 学习笔记之 WriteConcern
WriteConcern: 转载:MongoDB WriteConcern(写关注)机制 http://www.ywnds.com/?p=3688&viewuser=40 MongoDB部署模 ...
- PHP的bcmath编译安装
问题描述:zabbix编译安装时PHP条件检查失败,如下图: 解决办法: 1.PHP自带bcmath扩展模块,可直接进行编译安装. [root@localhost etc]# cd /usr/loca ...
- 利用npm安装/删除/查看包信息
查看远程服务器上的包的版本信息 npm view webpack version //查看npm服务器上包webpack的最新版本 npm view webpack versions //查看服务器上 ...
- C# 常见面试问题汇总
1.c#垃圾回收机制 从以下方面入手展开: 1.压缩合并算法 2.代的机制 3.GC调用终结器 Garbage Collector . NET采用了和Java类似的方法由CLR(Common ...
- 最简单的ArcGIS Engine应用程序(中)
上一篇中只能添加代码中指定的shp文件(最简单的ArcGIS Engine应用程序(上)) 为了让用户可以浏览磁盘加载指定的shp文件,需做一下调整. 从工具箱往窗体上添加一个OpenFileDial ...
- 使用jmeter进行压力测试入门讲解
1.下载安装jmeter 略 我这里放上5.1版本的,有需要可以下载 链接:https://pan.baidu.com/s/1xRZZmTY4do1oDU_xPit94Q&shfl=share ...