Il n'y a rien de mal avec la méthode qui renvoie le pointeur sur le vecteur comme ceci: vector<MyClass>* myMethod()
. Mais vous devriez vous poser quelques questions, comme:
- Faut-il être un pointeur vers le vecteur? Ne peut-il pas être juste
vector<MyClass>
?
- Cette méthode doit-elle également allouer de la mémoire pour ce vecteur?
- Devrait appelant de cette méthode
delete
/free
cette mémoire?
Et à votre deuxième question: je fais vecteur de pointeurs vers des objets de MyClass
(vector<MyClass*>
) que si elle est vraiment nécessaire. Cela va vous causer quelques problèmes avec la gestion de la mémoire, alors choisissons un moyen plus facile. Ok, parlons de cette question: Cette méthode doit-elle également allouer de la mémoire pour ce vecteur?
Si le but de cette méthode est de créer un vecteur, puis oui, la méthode doit également allouer de la mémoire pour elle:
vector<MyClass>* myMethod()
{
vector<MyClass>* v = new vector<MyClass>;
// initialize, fill or do whatever with this vector
return v;
}
appelant doit nettoyer alors:
vector<MyClass>* v = myMethod();
// do some stuff
delete v; // clean up
Si le but est simplement de récupérer le pointeur sur un vecteur spécifique qui ne peut pas être obtenu par l'appelant, cela pourrait ressembler à ceci:
vector<MyClass> _x; // caller can not access _x but myMethod can
vector<MyClass>* myMethod()
{
return &_x;
}
appelant ne doit pas supprimer ce vecteur dans ce cas:
vector<MyClass>* v = myMethod();
// do some stuff, don't delete v
'je fais une fonction qui renvoie un vecteur d'objets d'une classe MyClass' Non, vous n'êtes pas. Vous renvoyez un pointeur. –
'C'est correct de retourner un pointeur?' Cela dépend de beaucoup, beaucoup de choses. –
Votre exemple de code (a) utilise un pointeur invalide et un déréférencement invalide dudit pointeur invalide; (b) n'a aucun sens parce que vous n'insérez pas du tout un pointeur dans le vecteur –