C++中new关键字用法示例详解

 更新时间:2026年01月27日 09:36:53   作者:程序员赵大宝  
new是C++的一个关键字,同时也是操作符,关于new的话题非常多,因为它确实比较复杂,也非常神秘,这篇文章主要介绍了C++中new关键字用法的相关资料,需要的朋友可以参考下

一.什么是new(What)

1.new是一个关键字,用于开辟空间,开辟的空间在上,而一般声明的变量存放在栈上;

2.new得到的是一段空间的首地址。所以一般需要用指针来存放这段地址

new int(10);//返回new出来这块内存的地址

int *p=new int(10);//用一个指针去接受这个地址

cout << p << endl;//返回内存空间地址00995B08

cout << *p << endl;//返回初始值10

delete p;

3.开辟的内存空间需要记得delete掉,否则会造成内存泄漏!

delete p的时候:首先调用这个对象的析构函数,然后释放这个对象的空间。

二.使用new的场景(When and Where)

C++ 中的存储方法大致有:

静态存储:声明变量的时候前面添加static关键字;

自动存储: 这个举个例子,在一个函数A里面定义了一个变量并初始化, int a =10 ; 这个就是自动存储,

a仅当A()函数活动时存在。当成许控制权回到main()时,a使用的内存将自动被释放,

动态存储:数据的声明周期不完全受程序或函数的生命时间控制 ,所以C++ 中有new 来分配空间,不过由于内存不会自动释放,所以使用完之后还需要使用delete 来释放内存。

所以new是为了动态内存分配而服务的。

不适用的场合:

频繁调用场合不适合用new,new会频繁申请和释放内存。

常见的使用场景如下:

1.为变量动态分配内存,包括基本数据类型变量int、double;一维数组;二维数组;

2.为类对象动态分配内存,也可以为结构体分配内存(类和结构体类似);

三.如何使用new(How)

1.动态创建一个类对象

  • 获得一块堆内存空间;
  • 调用构造函数;
  • 返回正确的指针。

有一个类class Car,构造函数是Car(),创建一个该类的对象,并开辟一块空间存储,并返回空间的首地址;

Car *Audi = new Car();

delete Audi;

2. 动态创建一个基本数据类型变量

  • 获得一块堆内存空间;
  • 返回正确的指针。

没有了构造函数,但是可以同样在括号内赋初值。

new int(10);//返回这个空间的首地址
int *arr=new int(10);//开辟一个存放整数的存储空间,附上初值,返回一个指向该存储空间的地址(即指针)
delete arr;

3.动态创建一个一维数组

char* p = new char[10];//开辟一个存放字符数组(包括10个元素)的空间,返回首元素的地址
delete[] p;

4.动态创建一个二维数组

//开辟一个存放二维整型数组(大小为3*2)的空间,返回首元素的地址  
int** pc = new int*[3];//这边表示开辟行数为3
//int*[3]表示的为开辟三个存放int*元素的数组,所以才有了下一步pc[i]中对列数的开辟
	for (int i = 0; i < 3; i++)
	{
		pc[i] = new int[2];//这边表示开辟列数为2
		for (int j = 0; j < 2; j++)
		{
			pc[i][j] = i + j;
			cout <<pc[i][j] << " ";
		}
		cout << endl;
	}
//或者使用另一种方法
int(*pc)[2] = new int[3][2];//创建数组指针pc,注:数组指针与二级指针不一样
for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 2; j++)
		{
			pc[i][j] = i + j;
			cout <<pc[i][j] << " ";
		}
		cout << endl;
	} 
delete[] pc;

5.动态创建一个结构体对象

#include<iostream>
using namespace std;
struct MyStruct
{
	int a;
	MyStruct* b;
    MyStruct(int x): a(x), b(NULL) {};  //初始化列表构造函数  函数名与类名相同是构造函数
};
int main() {
	MyStruct* my = new MyStruct();
	delete my;
	system("pause");
	return 0;
}

总结 

到此这篇关于C++中new关键字用法的文章就介绍到这了,更多相关C++ new关键字用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 总结UNIX/LINUX下C++程序计时的方法

    总结UNIX/LINUX下C++程序计时的方法

    本文总结了下UNIX/LINUX下C++程序计时的一些函数和方法,对日常使用C++程序的朋友很有帮助,有需要的小伙伴们可以参考学习,下面一起来看看吧。
    2016-08-08
  • C++实现defer声明方法详解

    C++实现defer声明方法详解

    这篇文章主要介绍了C++实现defer声明,在和朋友交谈时候,无意间了解到Go语言的defer,发现挺有意思的。和智能指针类似,当出了作用域后,被defer修饰的操作才会执行
    2022-11-11
  • Java C++题解leetcode915分割数组示例

    Java C++题解leetcode915分割数组示例

    这篇文章主要为大家介绍了Java C++题解leetcode915分割数组示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • C语言 奇偶排序算法详解及实例代码

    C语言 奇偶排序算法详解及实例代码

    这篇文章主要介绍了C语言 奇偶排序算法详解及实例代码的相关资料,需要的朋友可以参考下
    2016-11-11
  • C++ QT QThread启动、停止、暂停和恢复的实现

    C++ QT QThread启动、停止、暂停和恢复的实现

    本文主要介绍了C++ QT QThread启动、停止、暂停和恢复的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • c++11&14-STL要点汇总

    c++11&14-STL要点汇总

    这篇文章主要介绍了c++11&14中的STL要点,文中代码简单易懂,方便大家更好的学习参考,感兴趣的朋友可以了解下
    2020-06-06
  • STl中的排序算法详细解析

    STl中的排序算法详细解析

    全排序即把所给定范围所有的元素按照大小关系顺序排列。sort采用的是成熟的"快速排序算法"(目前大部分STL版本已经不是采用简单的快速排序,而是结合内插排序算法)
    2013-09-09
  • C++ 情怀游戏贪吃蛇的实现流程详解

    C++ 情怀游戏贪吃蛇的实现流程详解

    贪吃蛇是曾经诺基亚手机上很经典很经典的传统老游戏,80.90后的童年时不多的游戏之一,跟电脑上的扫雷一样,下面来从贪吃蛇手机游戏的前世今生讲起
    2021-11-11
  • C语言srand函数的详细用法示例小结

    C语言srand函数的详细用法示例小结

    srand函数用于初始化随机数生成器,为后续rand函数生成随机数序列设置"种子",本文将从函数定义、工作原理、使用方法到注意事项,全面讲解srand函数的用法,感兴趣的朋友跟随小编一起看看吧
    2025-08-08
  • VSCode IDE 配置环境过程解析

    VSCode IDE 配置环境过程解析

    这篇文章主要介绍了VSCode IDE 环境配置,这里说的是仅使用 VSCode 创建C/CPP项目时的配置,VSCode 有代码提示, 定位来源和各种快捷键, 更适合日常编码工作,需要的朋友可以参考下
    2022-02-02

最新评论