当前位置: 首页 > article >正文

C++的new和delete

1. new、delete和malloc、free的区别

malloc和free,称作C的库函数;new和delete,称作运算符。
new不仅可以做内存开辟,还可以做内存初始化操作。
malloc开辟内存失败,是通过返回值和nullptr做比较;而new开辟内存失败,是通过抛出bad_alloc类型的异常来判断的。

	int *p = (int*)malloc(sizeof(int));
	if (p == nullptr) return -1;
	*p = 20;
	free(p);
	
	int *q = (int*)malloc(sizeof(int)*10);
	free(q);
	int *p = new int(20);
	delete p;

	int *q = new int[10];
	delete[]q;

2. new的几种用法

#include <iostream>
#include <new>

int main() {
	int *pl = new int(20);
	int *p2 = new (std::nothrow) int; //分配失败时返回nullptr,而不是抛出异常
	const int *p3 = new const int(40);

	//定位new
	int data = 0;
	int *p4 = new (&data) int(50);
	std::cout << "data:" << data << std::endl; // data:50

	return 0;
}
// 单个整数初始化为0
int* p1 = new int();      // 自动初始化为0
int* p2 = new int(0);     // 显式初始化为0
int* p3 = new int{0};     // C++11 列表初始化

// 数组初始化为0
int* arr1 = new int[5]();     // 所有元素初始化为0
int* arr2 = new int[5]{};     // C++11 所有元素初始化为0
int* arr3 = new int[5]{0};    // C++11 第一个元素为0,其余也为0

http://www.kler.cn/a/517446.html

相关文章:

  • Kafka 深入服务端 — 时间轮
  • 99.16 金融难点通俗解释:营业总收入
  • MySQL(1)
  • 使用 Pipeline 提高 Redis 批量操作性能
  • FPGA实现任意角度视频旋转(二)视频90度/270度无裁剪旋转
  • 使用 .NET Core 6.0 Web API 上传单个和多个文件
  • C#集合排序的三种方法(List<T>.Sort、LINQ 的 OrderBy、IComparable<T> 接口)
  • 前端开发常用的设计模式有哪些
  • 机器学习-学习类型
  • Mysql意向锁
  • 深入解析 Linux 内核中的 InfiniBand 驱动接口:ib_verbs.h
  • 二叉树相关oj题 1. 检查两颗树是否相同。
  • 多线程详解——IntentService工作原理(源码详解)
  • PC端实现PDF预览(支持后端返回文件流 || 返回文件URL)
  • 【竞技宝】DOTA2:NAVI junior被ESL取消参赛资格
  • springfox-swagger-ui 3.0.0 配置
  • 无监督学习:聚类、异常检测
  • C++AVL树(二)详解
  • 港科夜闻 | 香港科大获三千万基金资助,开发人工智能英语评估及学习系统,供全港中学生免费使用...
  • PostgreSQL中级专家是什么意思?
  • AI问答:在后端开发语境中 VO 是什么 / Value Object / 值对象
  • 第12章 volatile关键字的介绍(Java高并发编程详解:多线程与系统设计)
  • Lua语言的图形用户界面
  • Vue3 插槽(Slots)用法总结
  • 一组开源、免费、Metro风格的 WPF UI 控件库
  • DBeaver下载安装及数据库连接(MySQL)