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多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整理了一下,给大家分享,有不足之处还望大家 ...
随机推荐
- MySQL数据库从复制及企业配置实践
在实际生产中,数据的重要性不言而喻: 如果我们的数据库只有一台服务器,那么很容易产生单点故障的问题,比如这台服务器访问压力过大而没有响应或者奔溃,那么服务就不可用了,再比如这台服务器的硬盘坏了,那么整 ...
- vue解决刷新时闪烁
原文地址:原文地址 1.在vue容器的div里面加上 v-cloak <div id="app" v-cloak> 2.样式文件中加上 <style type=& ...
- 教你使用Cocos Creator制作国旗头像生成器,附源码!
关注「编程小王子」公众号回复[头像生成器]获得源码! 下面我重点介绍一下Cocos Creator H5头像生成的实现方法: 获取手机相册图片 在 Cocos Creator 中加载相册图片 Coco ...
- asp.net core learn
.NET Core WebApi RESTful规范 RESTful API 最佳实践 理解RESTful架构 接口版本控制 Support multiple versions of ASP.NET ...
- 从0开始学FreeRTOS-(创建任务)-2
# 补充 开始今天的内容之前,先补充一下上篇文章[从单片机到操作系统-1](https://jiejietop.gitee.io/freertos-1/)的一点点遗漏的知识点. ```js BaseT ...
- LeetCode_232-Implement Queue using Stacks
题意是使用栈实现队列:队列是先进先出,后进后出. class MyQueue { public: /** Initialize your data structure here. */ MyQueue ...
- 从键盘录入输入3 个数num1,num2,num3,按从大到小进行输出
本题分别使用嵌套分支语句以及三目运算符来实现,两种方法,可以对比看看. import java.util.Scanner; /** * 从键盘录入输入3 个数a,b,c,按从大到小进行输出 * @au ...
- [牛客网NOIP赛前集训营-普及组(第二场)]D-合法括号序列
链接:https://www.nowcoder.com/acm/contest/165/D来源:牛客网 合法括号序列 键盘上有左括号(,右括号),和退格键-,共三个键. 牛牛希望按键n次,使得输入的字 ...
- SpringBoot项目配置Tomcat和JVM参数
设置Tomcat端口号和连接数等 使用application.properties配置文件有一些参数无法设置,所以推荐创建一个类文件来配置,如下: package com.qipai.springbe ...
- Eureka错误解决方法
# Eureka错误解决方法 ## security.basic.enabled 配置过时或不可用默认情况下:用户名:user密码:启动应用在控制台会输出,如下图: 也可以通过如下属性配置:sprin ...