Estaba revisando EASTL's list class para ver cómo el autor implementó los nodos. Mi expectativa era una clase/estructura simplista. En cambio, veo una base y un nodo que hereda de esta base (aún simplista, pero ¿por qué dos clases?). Sus comentarios se explican por qué:¿Un tipo de plantilla desperdicia espacio en C++?
Definimos una ListNodeBase por separado de NodoLista (abajo), ya que nos permite que tienen operaciones no moldeados tales como insertar, eliminar (abajo), y lo hace de manera que la el nodo de lista de anclaje no lleva una T con él, que sería desperdicio de espacio y posiblemente llevaría a sorprender al usuario debido a las Ts adicionales existentes que el usuario no creó explícitamente. La desventaja de todo esto es que hace que la visualización de depuración de una lista sea más difícil, dado que los punteros de nodo son de tipo ListNodeBase y no ListNode. Sin embargo, vea ListNodeBaseProxy a continuación.
No entiendo un par de cosas aquí. I do entiendo la parte sobre por qué hará que la depuración sea un poco más difícil, pero ¿qué quiere decir con list anchor node doesn't carry a T with it
y would waste space and possibly lead to surprising the user due to extra Ts existing that the user didn't explicitly create
?
No utiliza una lista sin datos. Hay un único nodo llamado ** nodo de anclaje ** o ** centinela ** que está presente en cada instancia de la lista, incluso en la lista vacía, para eliminar algún código de caso especial asociado con listas vacías. Es este nodo único que no necesita contener los datos del usuario. –
@ n.m. esa sería la 'lista' de clases, puede echar un vistazo a la implementación en el enlace publicado por OP. Dado que la 'lista' en sí es el centinela, el punto es discutible. – littleadv
He buscado. Por lo que puedo decir, la 'list' * contiene * the sentinel, en la línea' base_node_type mNode; '. –