C++ vecteur d'objets vs. vecteur de pointeurs sur des objets

Je suis en train d'écrire une application à l'aide openFrameworks, mais ma question n'est pas spécifique à seulement; c'est plutôt une question d'ordre général sur le C++ vecteurs en général.

J'ai voulu créer une classe qui contient plusieurs instances d'une autre classe, mais aussi fournit une interface intuitive pour interagir avec ces objets. En interne, les élèves de ma classe ont utilisé un vecteur de la classe, mais quand j'ai essayé de manipuler un objet à l'aide de vecteur.à(), le programme compile mais ne fonctionne pas correctement (dans mon cas, il ne serait pas afficher une vidéo).

//instantiate object dynamically, do something, then append to vector
vector<ofVideoPlayer> videos;
ofVideoPlayer *video = new ofVideoPlayer;
video->loadMovie(filename);
videos.push_back(*video);

//access object in vector and do something; compiles but does not work properly
//without going into specific openFrameworks details, the problem was that the video would
//not draw to screen
videos.at(0)->draw();

Quelque part, il a été suggéré que je fais un vecteur de pointeurs sur des objets de cette classe au lieu d'un vecteur de ces objets eux-mêmes. Je l'ai fait et en effet, il a travaillé comme un charme.

vector<ofVideoPlayer*> videos;
ofVideoPlayer * video = new ofVideoPlayer;
video->loadMovie(filename);
videos.push_back(video);
//now dereference pointer to object and call draw
videos.at(0)->draw();

Je a allouer de la mémoire pour les objets dynamiquement, c'est à dire ofVideoPlayer = new ofVideoPlayer;

Ma question est simple: pourquoi l'aide d'un vecteur de pointeurs de travail, et quand souhaitez-vous créer un vecteur d'objets par rapport à un vecteur de pointeurs sur ces objets?

  • Pouvons-nous un peu de code? Un peu dur de répondre à cette juste une explication.
  • Nous ne pouvons pas comprendre pourquoi votre code ne fonctionne pas si vous ne publiez pas tout! S'il vous plaît ajouter un exemple qui met en valeur votre question.
  • Le code important n'est probablement pas la vector d'utilisation, mais le ofVideoPlayer classe elle-même.
InformationsquelleAutor Alan | 2011-07-08