⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 20000916027.htm

📁 C++ Builder学习中文版,让学者对其有一定的理解.
💻 HTM
字号:
<HTML>

<HEAD>

 

<TITLE>如何简化临时内存的分配与释放?</TITLE>



<META content="MSHTML 5.00.2314.1000" name=GENERATOR>

</HEAD>

<BODY aLink=#FF0000 bgColor=#ffffff leftMargin=0 link=#187800 topMargin=0 

vLink=#990099>



<div align="center">

  <table width="744" border="0" cellspacing="0" cellpadding="0" height="76">

    <tr> 

      <td>

        <p align="center"><font size="3"><br>

          <b>如何简化临时内存的分配与释放?</b></font></p>

        <div align="left"> 

          <p align="center"><font color=#000000>王俊蛟</font></p>

          <p>描述:在编制 C++ 程序时,最常遇到的一个令人恼火的问题便是临时资源的分配与释放问题, 由于程序的逻辑关系通常很复杂,引发异常的可能性也很多,为了妥善处理运行时异常, 

            我们不得不在可能引发异常的任何地方释放已分配成功的临时资源,然后</p>

          <p><font color=#000000></font>返回, 以保证程序的健壮稳定及系统的清洁,所以程序中可能随处可见delete、free等语句, 

            显得很繁! 那么有没有办法使得只顾分配、使用临时资源,而不顾其后事如何呢?<font color=#000000> </font> 

          </p>

          <p>在Delphi中可以用try...finally...实现一些资源的保护,但C++Builder中好象没有try...finally 

            这样的语法结构, 所以,在程序中为了正确释放内存等临时资源,不得不在有可能出错的任何地方书写释放语句delete,以保护有限的资源。 

            其实有一个较简单的方法可以一劳永逸,即为临时资源定义一个公共的类,将C++的new / delete语句稍作封装即可,类的定义如下: 

          <p>TMemory{<br>

          <dir>public:<br>

            &nbsp;void *ptr;<br>

            public:<br>

            &nbsp;TMemory(int size){ ptr=(void*)new char[size]; _WINAPI_::ZeroMemory(ptr,size);}<br>

            &nbsp;~TMemory(void){ if(ptr) delete ptr; }<br>

          </dir>

          };<br>

          应用示例如下:<br>

          void TMainForm::function(int size)<br>

          {<br>

          <dir>TMemory mem(size); //注意捕获异常:EOutOfMemory!<br>

            char *str=(char *)mem.ptr; //取得分配的内存指针<br>

            some_func(str); //其它操作<br>

            return; //直接返回,而不必担心释放内存,即使some_func中发生异常同样会自动释放内存<br>

          </dir>

          } 

          <p> 

          <font color=#000000>如何简化等待光标的的设置与还原 ? 

          <hr noShade size=1 width="100%">

          </font> 

          <p>解决问题的原理同上,类的定义如下: 

          <p>#pragma warn -bei //关闭枚举变量赋值的警告<br>

            class TWaitCursor{//自动处理等待光标,当函数调用栈解体时自动还原光标<br>

          <dir>private:<br>

            &nbsp;TCursor oldc;<br>

            public: <br>

            &nbsp;TWaitCursor(void) : oldc(Screen-&gt;Cursor){ Screen-&gt;Cursor 

            = crHourGlass; }<br>

            &nbsp;~TWaitCursor(void){ Screen-&gt;Cursor = oldc; }<br>

          </dir>

          };<br>

          应用示例如下:<br>

          void TMainForm::function(void)<br>

          {<br>

          <dir>some_opr(...); //其它操作<br>

            TWaitCursor waitit; //变为等待光标<br>

            some_func(...); //其它操作<br>

            return; //直接返回,光标会自动还原<br>

          </dir>

          } 

          <p>当创建TWaitCursor类的临时变量时,光标会改为等待状态,当该函数返回时,会自动还原光标。<br>

            注:创建自动变量时应采用如下方式,以避免Borland编译器的自动优化:<br>

          <dir>TWaitCursor wait;<br>

          </dir>

          而不能定义成下面的样子:<br>

          <dir>TWaitCursor wait();</dir>

          <p>&nbsp;</p>

        </div>

            </td>

    </tr>

  </table>

 

</div>

</BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -