模板是否在C++中浪费空间?

Sam*_*rsa 10 c++ templates

我正在浏览EASTL的列表类来查看作者如何实现节点.我的期望是一个简单的类/结构.相反,我看到一个基础和一个继承自这个基础的节点(仍然过于简单,但为什么还有两个类?).他的评论解释了原因:

我们将ListNodeBase与ListNode(下面)分开定义,因为它允许我们进行非模板化操作,例如insert,remove(下面),并且它使得列表锚节点不携带T,其中由于存在用户没有明确创建的额外Ts,会浪费空间并可能导致用户感到惊讶.所有这一切的缺点是,鉴于节点指针的类型是ListNodeBase而不是ListNode,它会使列表的调试查看更加困难.但是,请参阅下面的ListNodeBaseProxy.

我不明白这里有几件事.我明白为什么它会使调试观看有点困难的部分,但到底是什么,他的意思是list anchor node doesn't carry a T with itwould waste space and possibly lead to surprising the user due to extra Ts existing that the user didn't explicitly create

Ray*_*hen 7

如果没有辅助类,则列表根节点将包含从未使用过的T实例.第二句话是说你可能不希望空列表创建T.例如,创建T可能会产生副作用.