1. 用new/malloc显式分配在堆上的内存才需要用delete/free释放,而在栈上分配的如int array[80]在子程序结束时自动释放,分配与释放都和数据类型无关。
2. delete一个指针的时候 一定要检查是否为null,否则是个严重的应用程序错误.
3.释放一个数组要用delete []
4.类对象使用结束后将其delete,不delete的话,当程序退出的时候,内存都会被系统释放,不会有内存泄漏的问题.
内存泄漏说的是 长时间运行的程序(几年几月),如果不管理好你的内存,到时候会无内存可用.???
附:摘抄一个析构函数注释
CMyPoint::~CMyPoint() { //析构函数
//delete一个指针的时候 一定要检查是否为null,否则是个严重的应用程序错误.
//由于m_pName是用new 产生的空间 所以需要 delete来释放掉, new的东西都不会自己消除,需要我们在适合的使用调用delete
if(m_pName!=NULL) {
delete []m_pName; //因为它是一个数组所以需要用delete []
m_pName=NULL; //将它设置为null 防止再次使用这个指针去访问原来的地址,原来的地址已经被我们delete了.但编译器不会帮我们自动清它为null 所以我们自己清.
}
}
Resource Allocation Routine Cleanup Routine Cleanup Required?
================================================================================
Accelerators LoadAccelerators N/A No
Atoms GlobalAddAtom GlobalFreeAtom Yes
Bitmaps CreateBitmap DeleteObject Yes *
CreateBitmapIndirect DeleteObject Yes *
CreateCompatibleBitmap DeleteObject Yes *
CreateDIBitmap DeleteObject