首页 > 编程语言 >C++基础-理解new和delete

C++基础-理解new和delete

时间:2022-08-27 09:34:14浏览次数:126  
标签:malloc 20 int C++ free new delete

int main(int argc, char const *argv[])
{
	//C风格
	int *p = (int*)malloc(sizeof(int));
	if(p==NULL){
		return -1;
	}
	*p = 20; //初始化
	free(p); 

	int *q = (int*)malloc(sizeof(int)*20);
	if(q==NULL){
		return -1;
	}
	free(q);


	//C++风格
	try{
		int *p1 = new int(20);
	}catch(const bad_alloc &e){}
	delete p1;

	int *q1 = new int[20](); //20个int,且初始化为0
	delete[] q1;

	return 0;
}

malloc 和 free ,称作C的库函数
new 和 delete ,称作运算符

new 和 malloc 的区别:

  • new 不仅可以内存开辟,还可以做内存初始化操作

  • malloc 开辟内存失败,是通过返回值和 null做比较,

  • new开辟失败是抛出bad_alloc类型异常来判断

delete 和 free 的区别

  • free是一个标准的函数调用,无论是单个元素还是数组释放,只需要传入首地址即可

  • delete 释放数组内存需要加[]

new有多少种?

int *p = new int(20); //抛异常的new
int *p2 = new (nothrow) int; //不抛出异常的new, 和malloc的判断一样了
const int *p3 = new const int(40); //堆上开辟一个常量的指针,称为常指针

//定位new
int data = 0;
int *p4 = new (&data) int(50); //在指定的位置上划分了4字节大小内存初始化为50
cout<<data<<endl; //50

标签:malloc,20,int,C++,free,new,delete
From: https://www.cnblogs.com/anqwjoe/p/16629833.html

相关文章

  • C++之多态
    C++之多态1静态联编和动态联编C++支持编译时多态(静态多态)和运行时多态(动态多态)。运算符重载和函数重载就是编译时多态,而派生类和虚函数就是运行时多态。静态多态和动态......
  • C++:理论基础篇
    class类特性封装:多态:继承:工厂函数 const与#define的区别const用来定义常量、修饰函数参数、修饰函数返回值,可以避免被修改,提高程序的健壮性define是宏定义,在......
  • C++课程设计题
    C++课程设计题题目列表:一、简单计算器的设计问题描述简单计算器的基本功能如下:四则运算,例如加减乘除等;除了整数的运算也可实现小数的各类运算;判断非法操作,例如判定......
  • Xmake v2.7.1 发布,更好的 C++ Modules 支持
    Xmake是一个基于Lua的轻量级跨平台构建工具。它非常的轻量,没有任何依赖,因为它内置了Lua运行时。它使用xmake.lua维护项目构建,相比makefile/CMakeLists.txt,配置语......
  • new与malloc的区别以及实现方法
    new和malloc的内存分配在哪分配在堆上。也有说new是分配在自由存储区而malloc分配在堆上,自由存储区可以是堆也可以不是,具体要看new内部的实现。操作系统在堆上维护一个......
  • c++实现通讯录管理系统
    利用C++来实现一个通讯录管理系统系统中需要实现的功能如下:添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄,联系电话、家庭住址)最多记录1000人显示联系人:显......
  • 关于c++的一些好玩的
    #defineA(x) #x:将x转换为字符串。#defineA(x) va##x:将x拼接在变量名后。next_permutation(a+1,a+n+1):把a数组变成字典序下一位,最大则变成最小的。random_s......
  • C++ 内联函数
    1.函数的作用:避免重复制造轮子。(避免重复多次写相同的代码)2.函数的缺点:每调用一次函数,就会为这个函数分配一个“栈”,在计算机底层做很多准备工作(保护原来的执行环境,切换......
  • Windows c++获取磁盘剩余容量
    ULARGE_INTEGERfreeBytesAvailable;ULARGE_INTEGERtotalNumberOfBytes;//磁盘总字节ULARGE_INTEGERtotalNumberOfFreeBytes;//空闲字节GetDiskFreeSpa......
  • MySQL大量的delete后空间如何回收
    今天试验了MySQL(版本5.5.27)大量的delete后空间如何回收问题一、myisam表 optimize table tablename;  #二、innodb表(独立表空间)--innodb-file-per-tablea.方......