我正在通過EASTL's list class來看看作者如何實現節點。我的期望是一個簡單化的階級/結構。相反,我看到一個基礎和一個從這個基礎繼承的節點(仍然簡單,但爲什麼是兩個類?)。他的言論解釋爲什麼:模板類型在C++中浪費空間嗎?
我們從ListNode(下同)分別定義ListNodeBase,因爲它允許 我們有非模板操作,如插入,刪除(下圖),它 使得它,以便列表錨節點沒有攜帶T,這會浪費空間並且可能導致令用戶感到驚訝,因爲用戶沒有明確創建的多餘Ts存在 。所有這一切的不利之處在於, 由於節點指針是 類型的ListNodeBase而不是ListNode,它使得調試更難於查看列表。但是,請參閱下面的ListNodeBaseProxy。
我不明白這裏的一些事情。我對做了些什麼瞭解了爲什麼它會使調試查看有點困難,但是他的意思是list anchor node doesn't carry a T with it
和would waste space and possibly lead to surprising the user due to extra Ts existing that the user didn't explicitly create
?
您不使用沒有數據的列表。有一個名爲** anchor node **或** sentinel **的單個節點,即使在空列表中也存在於每個列表實例中,以消除某些與空列表關聯的特例代碼。這是一個不需要包含用戶數據的節點。 –
@ n.m。這將是類'list',你可以看看OP發佈的鏈接的實現。由於'list'本身就是哨兵,所以這一點是沒有意義的。 – littleadv
我看了。據我所知,'list' *包含'base_node_type mNode;'行的標記。 –