Bonne question, mais je pense que votre exemple est mauvaise! Votre macro LOOP
ne clarifie rien - elle cache en fait votre intention aux programmeurs qui n'utilisent pas votre macro, et elle ne ressemble même pas à C++ - ma première réaction à votre extrait serait "est-ce même C++?" ou "qu'est-ce qui ne va pas avec un for
?". Il peut être fastidieux d'écrire les boucles encore et encore, mais nous savons tous que tout le monde passe beaucoup plus de temps à lire et à maintenir le code qu'à l'écrire, donc ce n'est pas une perte de temps d'écrire for
, et c'est beaucoup plus clair. Vous pouvez continuer à faire valoir votre point de vue, mais vous devez savoir que l'utilisation de macros de cette façon est une technique largement acceptée - d'autres personnes regardant votre code vous appelleront aussi dessus.
Quoi qu'il en soit, pour ajouter une réponse réelle - mon langage préféré en C++ 0x est un vecteur de unique_ptr:
std::vector<std::unique_ptr<T>> my_container;
Il présente les avantages suivants: - essentiellement un vecteur sûr de pointeurs:
- Il fournit un accès aléatoire dans O (1) temps
- les éléments sont garantis de ne jamais se déplacer dans la mémoire même lorsque réaffectant (vous pouvez prendre en toute sécurité l'adresse de
T
s et les stocker)
- rapide pour des tâches telles que le tri (traînant juste quelques conseils, pas la copie d'objets lourds)
- Exception sécurité et aide à prévenir les fuites de mémoire -
erase()
sur un élément libère également la mémoire
- flexible - vous pouvez
std::move()
pointeurs hors du conteneur et les mettre ailleurs
Il maintient une ou deux inconvénients:
- Chaque élément est alloué sur le tas qui peut avoir des performances aurait mis en cause ations si l'ajout/la suppression d'un grand nombre d'éléments, plus les éléments peuvent être éloignés dans la localité de cache perdre la mémoire
- Iteration nécessite indirection double
(*i)->member
syntaxe - mais je ne pense pas que ce soit une grosse affaire
Toutefois, en particulier pour les objets lourds, je pense que c'est presque un conteneur idéal.
Re votre exmaple: C'est quelque chose que votre EDI devrait vous aider avec, pas obscurcir les macros. – Mchl
@Mchl, je pense que LOOP peut exprimer plus clairement mon intention ici. – xmllmx
+1 pour une question décente, mais -1 pour un exemple terrible et terrible. Net zéro vote :) – NPE