学习视频链接
《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 对原来分配的内存没有管理权
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)