Sto scrivendo un'applicazione utilizzando openFrameworks, ma la mia domanda non è specifica solo per oF; piuttosto, è una domanda generale sui vettori C++ in generale.Vettore C++ di oggetti rispetto al vettore di puntatori agli oggetti
Volevo creare una classe che contiene più istanze di un'altra classe, ma fornisce anche un'interfaccia intuitiva per l'interazione con tali oggetti. Internamente, la mia classe usava un vettore della classe, ma quando provavo a manipolare un oggetto usando vector.at(), il programma si compilava ma non funzionava correttamente (nel mio caso non avrebbe mostrato un video).
// 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();
Da qualche parte, è stato suggerito che faccio un vettore di puntatori a oggetti di quella classe, invece di un vettore di quegli oggetti stessi. Ho implementato questo e in effetti ha funzionato come un fascino.
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();
ero l'allocazione di memoria per gli oggetti in modo dinamico, cioè ofVideoPlayer = new ofVideoPlayer;
mia domanda è semplice: perché utilizzando un vettore di lavoro puntatori, e quando si sarebbe creare un vettore di oggetti rispetto a un vettore di puntatori a quegli oggetti?
Possiamo un po 'di codice? Un po 'difficile rispondere a questo da una semplice spiegazione. – MGZero
Non riusciamo a capire perché il tuo codice non ha funzionato se non pubblichi nulla! Per favore aggiungi un esempio che mostri la tua domanda. – Cameron
Il codice importante probabilmente non è l'uso di 'vector', ma la classe' ofVideoPlayer' stessa. –