W wukui Unregistered / Unconfirmed GUEST, unregistred user! 2004-02-21 #1 请问有比较全的防内存泄漏资料吗? 比如说哪些指针必须delete,哪些能够自动释放的。 比如线程类指针就不知道要不要delete。 谢谢!
A apw Unregistered / Unconfirmed GUEST, unregistred user! 2004-02-22 #2 这个问题大,大家慢慢谈。我先抛玉引砖。 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; }
这个问题大,大家慢慢谈。我先抛玉引砖。 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; }