<b>若何简化暂时内存的分配与释放</b>[VC/C++编程]
本文“<b>若何简化暂时内存的分配与释放</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
描写:在编制 C++ 程序时,最常碰到的一个令人恼火的问题就是暂时资源的分配与释放问题, 由于程序的逻辑关系普通很复杂,引发非常的大概性也很多,为了妥善处理运行时非常, 我们不得不在大概引发非常的任何地方释放已分配成功的暂时资源,然后返回, 以保证程序的结实安定及系统的洁净,所以程序中大概到处可见delete、free等语句, 显得很繁! 那么有没有办法使得只顾分配、利用暂时资源,而不顾后来事若何呢?
在Delphi中可以用try...finally...实现一些资源的保护,但C++Builder中好象没有try...finally 这样的语法构造, 所以,在程序中为了精确释放内存等暂时资源,不得不在有大概出错的任何地方书写释放语句delete,以保护有限的资源. 其实有一个较简单的办法可以一劳永逸,即为暂时资源定义一个大众的类,将C++的new / delete语句稍作封装便可,类的定义以下:
TMemory{
public:
void *ptr;
public:
TMemory(int size){ ptr=(void*)new char[size]; _WINAPI_::ZeroMemory(ptr,size);}
~TMemory(void){ if(ptr) delete ptr; }
};
利用示比方下:
void TMainForm::function(int size)
{
TMemory mem(size); //注意捕捉非常:EOutOfMemory!
char *str=(char *)mem.ptr; //获得分配的内存指针
some_func(str); //别的操作
return; //直接返回,而没必要耽忧释放内存,即便some_func中发生非常一样会自动释放内存
}
若何简化等候光标的的设置与复原 ?
--------------------------------------------------------------------------------
办理问题的原理同上,类的定义以下:
#pragma warn -bei //关闭列举变量赋值的告诫
class TWaitCursor{//自动处理等候光标,当函数调用栈崩溃时自动复原光标
private:
TCursor oldc;
public:
TWaitCursor(void) : oldc(Screen->Cursor){ Screen->Cursor = crHourGlass; }
~TWaitCursor(void){ Screen->Cursor = oldc; }
};
利用示比方下:
void TMainForm::function(void)
{
some_opr(...); //别的操作
TWaitCursor waitit; //变成等候光标
some_func(...); //别的操作
return; //直接返回,光标会自动复原
}
当成立TWaitCursor类的暂时变量时,光标会改成等候状况,当该函数返回时,会自动复原光标.
注:成立自动变量时应采取以下方法,以避免Borland编译器的自动优化:
TWaitCursor wait;
而不能定义成下面的模样:
TWaitCursor wait();
以上是“<b>若何简化暂时内存的分配与释放</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |