C++ Builder防内存泄漏大全(200分)

  • 主题发起人 主题发起人 wukui
  • 开始时间 开始时间
W

wukui

Unregistered / Unconfirmed
GUEST, unregistred user!
请问有比较全的防内存泄漏资料吗?
比如说哪些指针必须delete,哪些能够自动释放的。
比如线程类指针就不知道要不要delete。
谢谢!
 
这个问题大,大家慢慢谈。我先抛玉引砖。
1.一个原则:自己分配的内存自己释放。
也有例外的时候:如Vcl中的Form通常会由Application释放,而子控件(包括子窗体)会由父控件释放;也可以在它们被自动释放之前手动释放,当然在个过程也是Vcl中设计好的。
线程与Vcl窗体系统之间没有关系,VCL不会delete它。
2.另一种最容易产生泄漏的情况是代码段未捕捉例外:
char* p = new char[n];
...
foo(...);
// 一些过程,可能会产生例外
...
delete[] p;
// 以上代码一旦中间有例外产生,将不会有释放操作,内存便泄漏了。
改成:
char* p = NULL;
try
{
p = new char[n];
try
{
}
catch(...)
{
....
}
}
__finally
{
if( p )
delete[] p;
}
 
后退
顶部