C++ 笔记 关于动态内存分配 (new / delete)
2017-02-24 02:38
399 查看
C语言里面的动态内存分配用的是
其中,malloc用于分配一个单位的内存,返回指针。例如malloc(sizeof int)
calloc用于分配多个内存,形成数组,返回指向第一个位置的指针。例如calloc(10,sizeof int)
free(*ptr)用于释放ptr指向的空间
另外还有一个realloc(*ptr,size)可以为ptr指向的空间重新分配一个size大小的空间。
其中,分配的空间可以是基本类型,也可以是自定义类,或者结构体等。
这种功能经常用在需要重新改变大小的容器类里面,但是这里面有一个问题需要注意
如果在类的构造函数里面或者内部函数里面分配给指针的空间不需要了,就应该释放。
比如,如果某个功能是给private成员指针分配新空间,就需要先把原来的空间给释放,否则原来的空间就会一直存在,直到程序结束,这会造成内存泄漏。
即便是这个内存空间没有指针指向它,也需要先释放。
这一点跟java不同,java的虚拟机会自动回收没有指向的空间。但是c++里面需要手动释放。
以上这一段可以从实际操作中发现,windows的任务管理器可以看到程序占用内存大小。如果没有释放,占用内存就会显著增大,反之如果释放了,内存大小就不会变化。
还有一点,我发现,如果是用
并且,不能用delete释放非new创建的内容
在类的定义里面创建了一个数据成员,
如果使用的是new 指针的形式,就需要在析构函数里面将其释放。
如果是数据名的形式,就不需要/无法手动释放,在这个类被销毁的时候会自动被释放。
这一点有待确认,实际操作中貌似是对的。
malloc()/
calloc()和
free()
其中,malloc用于分配一个单位的内存,返回指针。例如malloc(sizeof int)
calloc用于分配多个内存,形成数组,返回指向第一个位置的指针。例如calloc(10,sizeof int)
free(*ptr)用于释放ptr指向的空间
另外还有一个realloc(*ptr,size)可以为ptr指向的空间重新分配一个size大小的空间。
C++中的动态内存分配
c++里面就增加了两个关键字new 和 delete用于实现刚才所述的功能。//分配一个int大小的空间给ptr int* ptr = new int; //array指向100个int空间数组的第一个位置 int* array = new int[100]; //释放单一空间 delete ptr; //释放数组空间,如果没有[],只会释放数组的第一个空间 delete[] array;
其中,分配的空间可以是基本类型,也可以是自定义类,或者结构体等。
这种功能经常用在需要重新改变大小的容器类里面,但是这里面有一个问题需要注意
如果在类的构造函数里面或者内部函数里面分配给指针的空间不需要了,就应该释放。
比如,如果某个功能是给private成员指针分配新空间,就需要先把原来的空间给释放,否则原来的空间就会一直存在,直到程序结束,这会造成内存泄漏。
即便是这个内存空间没有指针指向它,也需要先释放。
这一点跟java不同,java的虚拟机会自动回收没有指向的空间。但是c++里面需要手动释放。
以上这一段可以从实际操作中发现,windows的任务管理器可以看到程序占用内存大小。如果没有释放,占用内存就会显著增大,反之如果释放了,内存大小就不会变化。
还有一点,我发现,如果是用
int* ptr = new int形式创建的内容是需要释放的,如果是
int a = 100这样创建的内容是不需要的.
并且,不能用delete释放非new创建的内容
在类的定义里面创建了一个数据成员,
如果使用的是new 指针的形式,就需要在析构函数里面将其释放。
如果是数据名的形式,就不需要/无法手动释放,在这个类被销毁的时候会自动被释放。
这一点有待确认,实际操作中貌似是对的。
相关文章推荐
- Inside The C++ Object Model 学习笔记 -- 关于对象
- C++中的内存管理——关于new和delete的讨论
- C/C++中关于地址、指针和引用变量的学习笔记(三) : 结构
- C/C++中关于地址、指针和引用变量的学习笔记(八) : 命令行参数
- C/C++中关于地址、指针和引用变量的学习笔记(七) : sizeof和typedef
- C++对象模型之一 关于对象笔记
- C++学习笔记:New和Delete
- C/C++中关于地址、指针和引用变量的学习笔记(一)
- C++学习笔记3---类和动态内存分配
- C/C++中关于地址、指针和引用变量的学习笔记(十) : 引用型变量
- 关于c++的学习情况,不再更新了,因为找到了更好的笔记记录工具
- 关于C++当中new和delete操作符重载的一些感想
- 关于C++中的new 和 delete
- C/C++中关于地址、指针和引用变量的学习笔记(二) : 数组
- [C++] 关于delete和delete[]
- C++学习笔记之1:使用相同形式的new和delete
- 一个关于c++字符串处理和delete[]与delete差别的问题
- 关于delete C/C++ 指针
- C/C++中关于地址、指针和引用变量的学习笔记(五) : 指针
- 深度探索C++对象模型 关于对象的笔记