栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

学习视频链接

《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] = '';

	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 对原来分配的内存没有管理权

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/976438.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号