看板 CompBook 關於我們 聯絡資訊
Re : 網際網路四大服務 答客問 (1) - reference and delete 侯捷 [email protected] 2000.03.27 第一次發表於 清大.楓橋驛站(140.114.87.5).電腦書訊版(Computer/CompBook) 本文將於日後整理於 侯捷網站 侯捷網站:www.jjhou.com ---------------------------------------------------------------- jcwang wrote (2000/03/27) : >> 針對上述 (1),Effective C++ 的 item6 給了一個忠告: >> item 6 : "Use delete on pointer members in destructors." >> 否則會出現 memory leak 問題。 >> [...] >> 這是 C++ 標準行為。不過一般而言,reference 主要用於 >> 函式的型式參數(formal parameters);一般程式較少使用 >> reference 獨立物件。 > > 侯大哥: > > 這是我程式中比較特別的地方。我想過,Stroustrup 為什麼要 > 允許將 reference 用在 class memeber 中,而不只是 formal > parameters?我的結論是,當該物件需要「參照一個在其生命 > 過程中不會改變,而且一定要有效 (非 NULL) 的成員物件」 > 時,就適合使用 reference member variables。 > > 在四個伺服器裡,我在主程式的迴圈中需要將資料送給每一個 > 服務執行緒。這要如何做到呢?為什麼選擇將物件以參照的方 > 式傳給被呼叫者,又立即將其 delete 掉? > > 一般管理參數有兩種方式,可用 caller remove 或是 callee > remove,來決定由誰掌控釋放參數所使用的記體空間。在我們 > 的情況下, caller remove 意味著我們必須偵測執行緒的結 > 束,這不是一件單純的事。所以我採取 callee remove,讓 > 執行緒來釋放記憶體 (delete),所以才會有使用到 reference > member variables 的情況。我也可以選擇使用 pointer, > 但如此一來就必須常常去 ASSERT() 該變數的值,確定其不為 > NULL。使用 reference 可省去檢查為 NULL 的工作。 侯捷回覆: 我同意你的想法。 -- the end. -- ※ Origin: 楓橋驛站<bbs.cs.nthu.edu.tw> ◆ Mail: [email protected]