友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

C语言实例教程(PDF格式)-第32章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!






使用new和delete代替malloc和free可以从类库提供的增强的内存管 

理调试支持中得到好处,这在检测内存漏损时非常之有用。而当你使 

用MFC的发行版本 (Release   version)来创建应用程序时,MFC的发行 

版本并没有使用这种改良版本的new和delete操作符,取而代之的是 

一种更为有效的分配和释放内存的方法。  



与帧分配不同,在堆上可分配的对象所占用的内存的总量只受限于系 

统可有的所有虚拟内存空间。  



以下的示例代码对比了上面讨论的内存分配方法在为数组、数据结构 

和对象分配内存时的用法:  


…………………………………………………………Page 149……………………………………………………………

使用帧分配为数组分配内存:  



{   



const int BUFF_SIZE = 128;   



// 在帧上分配数组空间  



char myCharArray'BUFF_SIZE';  



int myIntArray'BUFF_SIZE';  



// 所分配的空间在超出作用域时自动回收  



}  



使用堆分配为数组分配内存:  



const int BUFF_SIZE = 128;  



// 在堆上分配数组空间  



char* myCharArray = new char'BUFF_SIZE';   



int* myIntArray = new int'BUFF_SIZE';  



。。。  



delete '' myCharArray;  



delete '' myIntArray;  



使用帧分配为结构分配内存:  



struct MyStructType { int topScore;};  



void SomeFunc(void)  



{  



// 帧分配  



MyStructType myStruct;  



// 使用该结构  



myStruct。topScore = 297;  



// 在超出作用域时结构所占用的内存被自动回收  



}  


…………………………………………………………Page 150……………………………………………………………

使用堆分配为结构分配内存:  



// 堆分配  



MyStructType* myStruct = new MyStructType;  



// 通过指针使用该结构  



myStruct…》topScore = 297;  



delete myStruct;  



使用帧分配为对象分配内存:  



{  



CMyClass myClass; // 构造函数被自动调用  



myClass。SomeMemberFunction(); // 使用该对象  



}  



使用堆分配为对象分配内存:  



// 自动调用构造函数  



CMyClass *myClass=new CMyClass;   



myClass…》SomeMemberFunction(); // 使用该对象  



delete myClass; // 在使用delete的过程中调用析构函数  



  l 注意:  



  l 一定要记住一个事实,在堆上分配的内存一定要记得释放,对于 

    使用运算符new分配的内存,应当使用delete运算符来释放;而使 

    用malloc函数分配的内存应当使用free函数来释放。不应 当对同 

    一内存块交叉使用运算符new、delete和函数malloc、free (即使 

    用delete运算符释放由malloc函数分配的内存,或使用free函数 

    释放由new运算符根本的 内存),否则在MFC的调试版本下将会导致 

    内存冲突。  



对固定大小的内存块,使用运算符new和delete要比使用标准C库函数 

malloc和free方便。但有时候我们需要使用可变大小的内存块,这 

时,我们必须使用标准的C库函数malloc、realloc和free。下面的示 

例代码创建了一个可变大小的数组:  


…………………………………………………………Page 151……………………………………………………………

#include   



#include   



#define UPPER_BOUND 128  



void main()  



{  



int *iArray=(int *)malloc(sizeof(int));  



for (int i=0;i
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!