首页 > 编程语言 >C++中的 new 与 delete

C++中的 new 与 delete

时间:2024-09-06 22:52:04浏览次数:10  
标签:int free C++ 空间 new store delete

我们今天来学习C++中的 new 与 delete。

它们2个是C++中的关键字,作用是在free store(C语言中的堆区)中申请空间来存放数据。

C++中的 new 与 delete_delete

存在的意义

为什么我们要在free store中去存放数据呢?

——因为free store中的生命周期是由我们程序员所控制的。

在某些时刻,我们只需要暂时性地使用一些数据。在这种情况下,如果我们把这些数据放在堆free store中,那么我们就可以在这些数据的使用结束后,立即释放这些空间,从而减去不必要的内存占用。


使用规则与实例

关键字 new 的代码示范:
#include <iostream>
using namespace std;

int main()
{
	//new 用法介绍:
	// 1.申请一个单位的空间:new 数据类型(初始化)
	// 2.申请多个单位的空间:new 数据类型[所需单位数量]
	// 3.返回值是地址,所以我们要使用指针来接收它
	//

	
	//示例:
	int *p = new int(8); //1.申请一个 int 的空间,且初始化为 8
	int *arr = new int[10];//使用 new 申请 10 个 int 的空间(数组)

	
	cout << *p << endl;//打印 *p 看看我们是否申请且初始化成功

	for (int i = 0; i < 10; i++)//打印 *p 看看我们是否申请且初始化成功
	{
		arr[i] = i;
		cout << arr[i] << " ";
	}

	return 0;
}

运行结果:

C++中的 new 与 delete_new_02


我们刚刚提到,free store 里的空间是由我们程序员来控制生死的,我们刚刚创建了它,那么问题来了:我们该如何销毁它,把空间还给计算机呢?

——使用关键字 delete


关键字 delete 的代码示范:
#include <iostream>
using namespace std;

int main()
{
	int *p = new int(8); 
	int *arr = new int[10];

	cout << *p << endl;

	for (int i = 0; i < 10; i++)
	{
		arr[i] = i;
		cout << arr[i] << " ";
	}


	//现在我们使用 delete 来销毁刚刚 new 的空间
	delete p;
	delete arr;

	//尝试再次输出
	cout << *p << endl;
	for (int i = 0; i < 10; i++)
	{
		arr[i] = i;
		cout << arr[i] << " ";
	}

	return 0;
}

运行结果:

C++中的 new 与 delete_new_03

我们可以看到,编译器报错了。这是因为当 delete 掉刚刚 new 所申请的空间后,就无法访问该空间了。也就是说,我们已经成功把刚刚所申请的空间还给了操作系统。

标签:int,free,C++,空间,new,store,delete
From: https://blog.51cto.com/xuwenda/11940328

相关文章

  • c++一个数因子和(快速求解)
    void一个数因子和(int整数){//缘由https://ask.csdn.net/questions/1054457#answer_1251715 inthe=0,j=0;stringa=""; while(++j<整数)if(!(整数%j))he+=j,a+=to_string(j)+"+"; cout<<a<<"的因子和:"<<he......
  • C++初学(19)
    19.1、文本IO如果你需要写入一千份以上的数据,如果手打那可太浪费时间了。这种情况下,应该让程序直接读取文件;同样的,让程序将输入写入到文件也是更加方便。文本I/O的概念:使用cin进行输入时,程序将输入视为一系列的字节,其中每个字节都被解释为字符编码。无论目标数据类型是什么,输......
  • C++入门基础(类和对象)
    7.类和对象1.面向对象和面向过程的区别面向对象:是将事务抽象成类和对象,以对象为中心,通过对象的交互实现程序的功能,可维护性强面向过程:是将复杂问题一步步拆分,通过依次执行来解决问题,可维护性比较弱2.类大小的计算1.内存对齐考虑内存对齐的默认大小vs默认是8字......
  • C++入门基础
    6.C++入门基础1.函数重载1.什么是函数重载函数重载是实现C++多态的一个重要技术,是在同一作用域内相同函数名因为参数的类型不同或者个数不同或者都不同构成重载2.C++是如何支持函数重载的1.命名改变根据对应的参数类名改成比如voidfoo(int)voidfoo(double)_fo......
  • Modern C++——使用分支预测优化代码性能
    大纲[[likely]][[unlikely]]样例应用场景题外参考代码参考资料在C++20中,新引入了一对属性关键字[[likely]]和[[unlikely]],它们用于为编译器提供关于代码分支执行概率的额外信息,以帮助编译器进行更好的优化。这对属性是基于长期实践中开发人员对程序执行路径的深入理解......
  • 枚举: C++和Python实现鸡兔同笼问题
    作者制作不易,关注、点赞、收藏一下吧!目录1.Python实现2.C++实现1.Python实现首先,我们需要输入头和脚的数量:head=int(input("请输入头的数量:"))feet=int(input("请输入脚的数量:"))input()实现输入,int()实现把字符串型(str)换为整型(int)。然后,进行循环......
  • c++的面向过程与面向对象
    面向过程与面向对象面向过程:在编程时重点考虑如何解决问题,以及解决问题的具体步骤。面向对象:在编程时重点考虑的是"谁"能解决问题(类、结构),以及"它"解决问题时所需要属性(成员变量)和功能(成员函数)。抽象:把“解决问题者”当作思考或观察对象,把解决问题所需的具备的属性和功能......
  • c++的类和对象
    类和对象什么是类把抽象结果(利用面向对象的思维模式,思考、观察出的结果),使用用C++的语法封装出一种类似结构的自定义数据类型(复合数据类型)。如何设计类struct结构名{  成员函数;//结构的成员默认访问权限是public  成员变量;};​class类名{  成员......
  • 修复Microsoft Visual C++ 2015中msvcp140_ATOMIC_WAIT.dll缺失的5大策略
    在电脑使用过程中,我们经常会遇到一些错误提示,其中之一就是“msvcp140_ATOMIC_WAIT.dll丢失”。这个错误提示通常出现在运行某些程序或游戏时,给使用者带来了很大的困扰。那么,如何解决这个问题呢?一,原因分析msvcp140_ATOMIC_WAIT.dll是MicrosoftVisualC++2015运行时库的一部......
  • C++常见知识掌握
    1.Linux软件开发、调试与维护内核与系统结构Linux内核是操作系统的核心,负责管理硬件资源,提供系统服务,它是系统软件与硬件之间的桥梁。主要组成部分包括:进程管理:内核通过调度器分配CPU时间给各个进程,实现进程的创建、调度、终止等操作。使用进程描述符(task_struct)来存储进程......