C++学习日记14——动态内存分配

C++学习日记14——动态内存分配,第1张

学习视频链接

《C语言-C++学习指南》22.1-new与delete申请内存_哔哩哔哩_bilibili优酷 本套视频教程由毕业自清华大学的业界人士出手,为小白精心定制,从最简单的helloworld程序开始讲起,以VS2008为演示平台,每一个语法都有全程演示,每一步都能看得一清二楚。内容覆盖C/C++全部语法和所有核心概念:指针、结构体、类。。。。从最简单的语法到最深刻的概念,均为您娓娓道来,言之必详、听之必懂。https://www.bilibili.com/video/BV1ss411k774?spm_id_from=333.337.search-card.all.click

目录

一、malloc/free

二、new/delete

2.1 基本用法

2.2 申请多个对象

2.3 其他数据类型

2.4 使用原则

2.5 注意

三、其他的探索


 

一、malloc/free

1、malloc申请而来的只是内存,严格地说并不是“对象

// 4 个 int,16 个字节
int* p = (int*)malloc(16);
for(int i = 0; i < 4; i++) {
    p[i] = i;
}
free (p);

 

二、new/delete 2.1 基本用法

1、在 C++ 中,用 new/delete *** 作符取代 malloc/free

 

2、申请一个对象:

int* p = new int;

 

3、释放:
delete p;

 

4、注意:

(1) new 的返回值直接就是对象指针,不用再转换

(2) new 的时候可以设初始值 new int(12); // 相当于 int* p = new int; *p = 12;

 

5、代码

#include 
using namespace std;

int main(void)
{
	int* p = new int(12);

	cout << *p << endl;

	delete p;
	return 0;
}

 

2.2 申请多个对象

1、申请 1024 个 int 对象:

int* p = new int [1024];

 

2、释放:

delete [] p;

 

3、注意:

(1) 用 [] 指定对象个数

(2) 如果 new 的时候用了 [],则释放的时候使用 delete [] *** 作符

(3) 如果只申请了一个对象 new int[1];,释放的时候也要用 delete []

 

4、代码

#include 
using namespace std;

int main(void)
{
	int* p = new int[1024];

	for (int i = 0; i < 1024; i++)
	{
		p[i] = i + 1;
	}
	cout << *(p + 6) << endl;

	delete [] p;
	return 0;
}

 

2.3 其他数据类型

1、double

#include 
using namespace std;

int main(void)
{
	double* p = new double(12.34);

	cout << *p << endl;

	delete p;
	return 0;
}

 

2、结构体

#include 
using namespace std;

struct Student
{
	int id;
	char name[32];
};

int main(void)
{
	Student* s = new struct Student;

	s->id = 12;
	s->name[0] = 'a';
	s->name[1] = 'b';
	s->name[2] = 'c';
	s->name[3] = '\0';

	cout << "id = " << s->id << " name = " << s->name << endl;

	delete s;
	return 0;
}

 

2.4 使用原则

使用原则与 malloc/free 类似,都是向内存管理器 MM 来申请内存

(1) 用 new 申请的内存,必须用 delete 释放

(2) 用 new[] 申请的内存,必须用 delete[] 释放

(3) 用完之时,及时释放

 

2.5 注意

和 free 一样,delete 之后指针所指向的内存不再可用

delete p;

p = NULL;  // 最好置为空指针

 

2.6 探索

问题:delete p 之后,p 的值会发生改变吗?

答案是不会改变,因为 delete 只是让 p 对原来分配的内存没有管理权

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1498571.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-25
下一篇 2022-06-25

发表评论

登录后才能评论

评论列表(0条)

保存