2017-10-19 19 views
3

Par exemple, en utilisant C, disons que je définir un noeud comme celui-ci:Est-il considéré comme une mauvaise pratique ou un anti-pattern pour envelopper une liste chaînée dans une autre structure qui contient seulement la tête de la liste?

typedef struct nde { 
    int val; 
    struct nde* next; 
}node; 

Et puis je « envelopper » avec quelque chose comme ceci:

typedef struct lst { 
    node* head; 
}list; 

Je ne veux ce cas particulier. Je sais que l'utilisation de l'enveloppe pourrait être utile si vous voulez inclure d'autres informations, mais est-ce considéré comme une "mauvaise pratique" si elle contient seulement un pointeur sur la tête? C'est une façon beaucoup plus intuitive de le faire pour moi, principalement parce que lorsque vous poussez ou ouvrez ou utilisez une autre fonction, vous serez toujours déréférencé, et les conventions de nommage ont aussi plus de sens.

+0

Je crois que c'est un beau motif. –

Répondre

8

Non, ce n'est pas un anti-pattern, ce n'est pas inhabituel. Cela vous permet d'avoir un seul handle qui fait référence à la liste, qui ne change pas lorsque vous supprimez des éléments. Si vous ne le faites pas, la suppression du premier élément de la liste est un cas particulier, car vous devez mettre à jour le pointeur de l'appelant pour qu'il pointe vers la nouvelle tête. Et s'il y a plusieurs références à la liste, il est presque impossible de faire en sorte que toutes les mises à jour soient faites.

Si vous savez qu'il n'y aura jamais qu'une seule référence à la liste, il n'y a pas besoin de le faire.

+2

Réponse bien équilibrée. – chux