【C++】new用法详解

这篇具有很好参考价值的文章主要介绍了【C++】new用法详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一.什么是new(What)

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

三.如何使用new(How)


一.什么是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.动态创建一个结构体对象文章来源地址https://www.toymoban.com/news/detail-565408.html

#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用法详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++ freopen函数用法详解

    在OI里赛制中 如果没有文件操作或文件操作被注释,等待着你的就是 爆零 的命运。C和C++的文件操作,一般是用fopen或fstream,我们用 freopen ,即文件重定向。它的用法其实也挺简单。 参数: _Filename :要打开的文件名。 _Mode :打开方式,同fopen。 _File :一个FILE型指针,可以

    2024年02月06日
    浏览(64)
  • C++new用法详解

    目录 一.什么是new(What) 二.使用new的场景(When and Where) 三.如何使用new(How) 1. new是一个,用于开辟空间 ,开辟的空间在 堆 上,而一般声明的变量存放在栈上; 2.new得到的是一段 空间的首地址 。所以一般需要 用指针来存放 这段地址 3.开辟的内存空间需要记得

    2024年02月08日
    浏览(37)
  • new和delete用法详解

        本篇文章对C++中的new和delete进行详解。在讲解new和delete时,我们会对比C语言中的malloc和free,看看两者的区别和相似之点。希望本篇文章会对你有所帮助。 文章目录 一、什么是new和delete 二、new和delete的用法 2、1 new和delete操作内置类型 2、2 new和delete操作自定义类型 三、

    2024年02月05日
    浏览(37)
  • c++ set用法详解超详细 适合零基础小白

    目录 1.set简介  2.插入数据  3.删除数据  4.其它常用方法 set 是 C++ 标准库中的一个容器,属于关联容器的一种。它是一个有序集合,其中的元素是唯一的,即每个元素只能在集合中出现一次。 set 是基于红黑树实现的,这使得插入、删除和查找操作的时间复杂度都是 O(log n)。

    2024年04月28日
    浏览(46)
  • 【C++深入浅出】STL之string用法详解

    目录 一. 前言 二. STL概要 2.1 什么是STL 2.2 STL的六大组件 2.3 STL的缺陷 三. string类概述 3.1 什么是string类 3.2 为什么要使用string类 四. string类的使用 4.1 包含头文件 4.2 构造函数 4.3 赋值运算符重载 4.4 容量操作 4.5 访问/遍历操作 4.6 查找修改操作 4.7 子串操作 ​4.8 非成员函数  

    2024年02月05日
    浏览(53)
  • C++ STL之 queue和deque用法详解

    1.1 创建queue对象: queue数据类型,容器类型 q; 数据类型:可以是int、double等基本类型,也可以是自定义的结构体。 容器类型:一般为deque或者list(双向链表),可省略,省略时以deque为默认容器。 声明代码如下: 只能队尾插入,队首弹出。无法index遍历,也不可以迭代器遍

    2023年04月10日
    浏览(35)
  • 【C++入门】学习使用二维数组基本知识及用法详解

    🧛‍♂️iecne个人主页: : iecne的学习日志 💡每天 关注 iecne的作品,一起进步 💪一起学习,必看iecne 🐳希望大家多多支持🥰一起进步呀! 二维数组就是在一维数组上多加一个维度。 建议:以下三种定义方式,利用第二种更加直观,提高代码可读性 第二种就是在定义一

    2024年01月25日
    浏览(55)
  • C++ vector的常见用法详解(超详细)\(^o^)/~

    vector ,也叫“变长数组”,即 长度根据需要改变 的数组。在算法竞赛中有十分广泛的使用~ 目录 1、vector的定义 2、vector常用初始化方法 1、使用花括号直接赋值: 2、使用圆括号赋值: 3、vector容器内元素的访问 1、通过下标访问: 2、通过迭代器来访问: 4、vector常用函数实

    2024年02月05日
    浏览(40)
  • C++ 布置new 布局new placement new

    new操作符(operator new), 在头文件 #include new 定义。 主要包括以下几类: 可替换的分配函数 void* operator new ( std::size_t count ); ,如 T* p1 = new T; 可替换的不抛出分配函数 void* operator new ( std::size_t count, const std::nothrow_t tag ); 不分配布置分配函数 void* operator new ( std::size_t count, void* p

    2024年02月10日
    浏览(41)
  • 【C++基础(九)】C++内存管理--new一个对象出来

    💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:C++从入门到精通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习C++   🔝🔝 在C语言中,有四个内存管理函数: malloc,calloc,realloc和free 但是它们的使用十分的不方便: 代码量很大,并且有一个新的问题: malloc函数不会初始

    2024年02月14日
    浏览(85)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包