J'ai une fonction qui prend un nombre et renvoie à beaucoup de choses (par exemple, ints). Ce qui est le plus propre de l'interface? Quelques réflexions:
- De retour d'un
vector<int>
. Le vecteur serait copié à plusieurs reprises, ce qui est inefficace. - De retour d'un
vector<int>*
. Mon getter doit désormais répartir le vecteur lui-même, ainsi que les éléments. Il y a tous les problèmes habituels de l'oms a gratuit le vecteur, le fait que vous ne pouvez pas allouer une fois et utilisez le même stockage pour beaucoup de différents appels à la lecture, etc. C'est pourquoi les algorithmes de la STL généralement éviter d'allouer de la mémoire, au lieu de vouloir qu'il est passé dans. - De retour d'un
unique_ptr<vector<int>>
. Il est maintenant clair qui le supprime, mais nous avons encore d'autres problèmes. - Prendre un
vector<int>
comme un paramètre de référence. La lecture peut -push_back()
et l'appelant peut décider d'reserve()
de l'espace. Cependant, ce qui devrait le getter faire si le passé-vector
est non-vide? Ajouter? Remplacer par compensation d'abord? Affirmer que c'est vide? Ce serait bien si la signature de la fonction n'a accordé qu'une seule interprétation. - Passer un
begin
etend
itérateur. Maintenant nous avons besoin de retourner le nombre d'éléments effectivement écrit (qui peut être plus petite que souhaitée), et l'appelant doit être prudent de ne pas accéder à des éléments qui n'ont jamais été écrites. - Avoir de la lecture prendre un
iterator
, et l'appelant peut passer uninsert_iterator
. - Abandonner et de passer un
char *
. :)