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

来源:互联网 发布:mac卸载 landesk 编辑:程序博客网 时间:2024/06/07 12:30

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

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

阅读全文
0 0
原创粉丝点击