33)new和delete关键字
------------------------------------------------------------------------------------------------------------------------------------------------------
(1)int *p=new int(10);//就是在堆区申请一个int,然后赋值为10
(2)int *p=new int【10】; //申请一个数组 含有10个元素,p是这个数组的首地址
(3)其实平时可以 int a(10); //其实int也是一个类
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
(1)malloc和free的区别:malloc和free是标准库的函数 stdlib.h中的
(2)new和delete是C++语言的操作符,是集成进去的,不用什么头文件,也不用压栈和出栈,这个就有了省时间
(3)new构造一个对象时,会调用类的构造函数,但是 malloc却不会,必须手动去实例化类的成员变量
(4)free在销毁对象时,不会调用析构,但是 delete会调用析构函数
(5)
--------------------------------------------------------------------------------------------------------------------------------------------
1)new和delete,实际上和sizeof一样,是操作符,不是函数
2)动态的分配和撤销内存空间,例如C的malloc和free是对堆内存的申请和释放,在C++中,用 new 和delete来进行
3)但是,为了和C语言兼容,还是保留了 malloc和free
4)看两段代码,实现一样的功能,但是不同的写法:
//C语言写法
void test1()
{
int *p=(int *)malloc(sizeof(int));
*p=;
if(p!=NULL)
{
free(p);
p=NULL;
} }
//C++写法
void test2()
{
int *p=new int;
*p=;
if(p!=NULL)
{
delete p;
}
}
5)然后 开辟数组,用new和delete
//C语言写法
void test1()
{
int *p=(int *)malloc(sizeof(int));
*p=;
if(p!=NULL)
{
free(p);
p=NULL;
}
//如果开辟一个数组
int *p=(int *)malloc(sizeof(int)*); for(int i=;i<=;i++)
{
p[i]=i;
}
}
//C++写法
void test2()
{
int *p=new int;
*p=;
if(p!=NULL)
{
delete p;
} //开辟数组
int *p=new int[];
for(int i=;i<=;i++)
{
p[i]=i;
}
}
33)new和delete关键字的更多相关文章
- C++11的default和delete关键字
C11的新特性实在是太多了,这2个关键字关注的人倒是少了很多,其中有一个原因便是编译器支持得太慢了(VS到VS2013才支持上),不过这2个关键字那真是极为有用的,下面我们来看看. [default关 ...
- 4.C++中的函数重载,C++调用C代码,new/delete关键字,namespace(命名空间)
本章主要内容: 1)函数重载 2)C++调用C代码 3)new/delete关键字实现动态内存分配 4)namespace命名空间 大家都知道,在生活中,动词和不同的名词搭配一起,意义都会大有不同,比 ...
- [置顶] perl脚本中defined,exists和delete关键字的用法和区别
刚学习perl脚本的时候,喜欢频繁使用defined关键字判断一个hash中某个key是否存在,后来程序出了问题才去perl官方文档查看关于defined关键字的准确使用方法.因此,这里我把perl中 ...
- new和delete关键字
new关键字创建出来的对象位于什么地方?很明显嘛,new关键字创建出来的对象一定位于堆空间,这种说法一定正确吗?本篇博客帮你揭开其神秘的面纱. 被忽略的事实new/delete的本质是C++预定义的操 ...
- js的delete和void关键字
delete关键字 delete关键字的作用: 删除对象的属性 语法:delete 对象.属性 可以删除没有使用var关键字声明的全局变量(直接定义在window上面的属性) delete关键字的 ...
- Understanding delete
简述 我们都知道无法通过delete关键字针对变量和函数进行操作,而对于显示的对象属性声明却可以进行,这个原因需要深究到js的实现层上去,让我们跟随 Understanding delete 来探究一 ...
- C++中的new与delete(二)
C++一个对象构造的完整过程为:分配内存和初始化,这也是new关键字所实现的功能,分配内存可通过重载new操作符来实现,系统初始化可通过调用构造函数来完成.我们不能改变new关键字的功能,但可以改变分 ...
- C++11 之 delete 和 default
1 特殊成员函数 设计一个类,没有成员函数 (member function),只有数据成员 (member data) class DataOnly { private: std::string ...
- C++ default 和delete的新用法
C++中的默认函数与default和delete用法一. 类中的默认函数a.类中默认的成员函数1.默认构造函数2.默认析构函数3.拷贝构造函数4.拷贝赋值函数5.移动构造函数6.移动拷贝函数 b.类中 ...
随机推荐
- POJ 2586:Y2K Accounting Bug
Y2K Accounting Bug Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11297 Accepted: 56 ...
- tensorflow--建立一个简单的小网络
In [19]: import tensorflow as tf import numpy as np # #简单的数据形网络 # #定义输入参数 # X=tf.constant( ...
- OpenCV3 Ref SVM : cv::ml::SVM Class Reference
OpenCV3 Ref SVM : cv::ml::SVM Class Reference OpenCV2: #include <opencv2/core/core.hpp>#inclu ...
- FreeImage库的学习和使用
1.FreeImage_SetPixelColor x横轴方向 y纵轴方向 左下角是(0, 0)
- 网络寻路(DFS)
Description X 国的一个网络使用若干条线路连接若干个节点.节点间的通信是双向的.某重要数据包,为了安全起见,必须恰好被转发两次到达目的地.该包可能在任意一个节点产生,我们需要知道该网络中一 ...
- Oracle 中多个字段显示成一列
SELECT COALESCE(A,B,C,'NA') FROM XXXXX --判断A若为空则取B,B为空这取C,C为空则取默认值'NA'
- VS.NET中的常用控件和类型的命名规范
表1 命名规范 VS名称 简写 VS名称 简写 数据类型 Array arr Boolean bln Byte byt Char Chr Date Time dtm Decimal dtm Doub ...
- 洛谷 P2658 汽车拉力比赛
题目传送门 解题思路: 二分答案,然后bfs验证,如果从一个路标可以达到其它所有路标,则答案可行.知道找到最佳答案. AC代码: #include<iostream> #include&l ...
- 吴裕雄--天生自然MySQL学习笔记:MySQL UNION 操作符
MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中.多个 SELECT 语句会删除重复的数据. 语法 MySQL UNION 操作符语法格式: SELECT ...
- 1月18日 LCA专项训练
A. Lorenzo Von Matterhorn B.Minimum spanning tree for each edge C.Misha, Grisha and Underground D.Fo ...