C++高级编程 第十三章: 有效的内存管理

这一章其实也就讲了一下内存的具体情况,我觉得一般般,不是很深入,都是些表面

1.如何描述内存

我们通常描述一个指针,都是说它指向一个内存.但是其实, 指针本身就是在栈里面而已

栈 ————————————堆

ptr————————————*ptr

这个是什么意思呢,就是指针只是一个变量而已,它既可以存在于栈中,也可以存在于堆中.
栈: int *ptr = new int;
堆: int *ptr; *ptr=new int; ptr= new int;

多数我们定义栈的指针, 我们只是让这个栈里面的指针指向堆里面的内容而已

2. new和malloc的区别

new的话,除了分配合适大小的内存外, 还会调用该对象的默认构造函数, 并且成功后返回一个指向该内存的指针.在new失败的同时,会抛出一个异常
malloc的话, 就只会分配固定大小的内存.

相对应的:
delete的话会自动调用该对象的析构函数.
free的话 什么只是清理该内存而已.!!!

3.”构造”动态数组 and “析构”动态数组

我们在栈内构造数组通常这样
int array[10];//
int array[10][10];//

相对应 在堆内
int *array = new int[5];//13
但是二维的时候,1因为申请的内存不是连续的,所以不能用int **array = new int[10][10]

所以我们必须先申请第一维的数组长度, 然后再从第一维里面的每个元素里面申请第二维的数组长度.

int **array = new int[10];
for(int i=0;i<10;i++){
    array[i] = new int[10];//
}

2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值