代碼數量少, 并不代表其后執行的指令少; 當然,對于現在的編譯器,我們有理由相信它會幫我們優化的很好,我不敢保證我的消除了if-else的代碼會比其優化后的更好, 但至少我們知道了這其中優化有可能是這么做的。
博主果然強, 做夢都在工作, 而且還是內存泄露這么具體的事, 而且還那么準。。。。
我們項目中一般用
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
DEBUG_NEW分配的內存會被跟蹤, 所以當程序退出的時候我們能知道哪些內存沒被釋放以及其詳細信息。
博主前面講的幾種方法, 如分配申請號, 內存地址, 內存大小都不曾使用過, 但的確有意思, 有啟發。
re: C++模板類的三種特化 SmartPtr 2007-07-05 17:30
謝謝walkspeed的回復, 我想對于全特化和偏特化這么理解應該是正確的, 就是全特化后確定了一個真正的類型, 而偏特化后其實還是一個原類型, 這樣的話, 以上2, 3的確屬于偏特化。
模板的運用的確很廣,無論模板元編程中的將計算提前到編譯器,還是編譯器多態(或者叫靜態多態), 都是非常漂亮聰明的應用, 在<<Modern C++ Design>>有著極好的體現。
re: C++模板類的三種特化 SmartPtr 2007-07-05 11:53
從廣義上來講, 我覺得可以把這種情形歸入模板偏特化。
但是根據我們一般的理解,模板的偏特化是指需要根據模板的某些但不是全部的參數進行特化, 如下:
template<class T1, class T2>
class A
{
}
template<class T1>
class A<T1, int>
{
}
說實話, 我第一次發現第二和第三種用法時, 還是覺得挺新鮮的,這到底是屬于全特化還是偏特化, 我也說不清楚, 但這也不重要,只要我們知道有這種用法,能應用它就行了
re: do...while(0)的妙用 SmartPtr 2007-07-04 11:02
to 沐楓
歡迎參與討論。
的確,對于用do-while-break消除goto語句,的確不是一個很完美的例子,用auto_ptr是一個很好的選擇, 而且這樣也達到了異常安全的目的。但是auto_ptr只能處理指針這種資源, 我們可能還有處理其他資源,比如文件, 數據庫鏈接,網絡連接等等。 這樣,在沒有類似auto_ptr的機制處理這些資源的時候, 用do-while-break會是一個比較簡單但不算太差的選擇。
另外, 對于你提到的多層循環的問題, 我想你可能被“do-while是用來做循環“這個定式限制了,這里do-while(0)的作用是在執行遇到錯誤時能break,正確的釋放資源, 也就是說這么設計著去用的, 你想想, 是不是不會出現你想的那種情況?
re: 未解之謎---Edge到Nurbs曲線的轉化 SmartPtr 2007-07-03 23:05
樓主好像對C++和CAD這一塊很有興趣與研究,我對這方面也有所了解,曾組隊自行研發學習過CAD系統。剛來CppBlog,樓主今后多多指教了。
re: 網訊筆試歸來 SmartPtr 2007-03-04 23:09
if (m_Data != NULL)
{
delete [] m_Data;
m_Data = NULL;
}
***************************************
因為C++delete一個NULL指針是合法的。(可能編譯器delete的時候就對NULL進行了特殊處理),所以無需判斷,直接寫:
delete [] m_Data;
m_Data = NULL;