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