堆~变量:
C++中创建动态指针:
int *p; //定义整型指针变量p
p = new int; //new创建一个int类型的内存区域,然后将该区域的内存地址赋给指针变量p,p占用4个字节(int型嘛)
或者 int *p = new int;
释放:delete p; //将动态内存释放,但是p指针变量还在,并且还指向原来的位置,在又重新创建同一类型的(不同类型的也有可能)堆空间时,p默认还会指向新建的堆,这样会造成两个指针同时指向同一段地址,所以需将p指向空指针(空指针的不当使用可能会造成系统崩溃,也是一种防止调试错误的方法)。但不能删除一个没有指向任何地址的指针,可以删除空指针
p=0; //记得要跟随在 delete p; 之后!!
C中创建堆:
void *malloc(size_t size); // 参数:size_字节数 返回值:成功返回分配空间的首地址,失败返回 NULL
释放:void free(void *ptr); //功能:释放由 malloc、calloc、realloc 分配的空间参数, ptr_:空间的首地址 ,无返回值
若没有删除动态指针就重新赋值,或者没有使用完之后没有释放,就会造成内存泄漏。
堆~对象
在堆中创建一个对象:Human *p = new Human; //Human 是对象
在堆中删除一个对象:delete p;
访问堆中的的数据成员: (*p).get(); //get()是Human中的一个方法
或者 p->get();
存储在堆中的对象,需要程序员自行对其所占用内存释放后,系统才对内存回收(执行析构函数),否则得等到程序结束。