Я пишу приложение, используя openFrameworks, но мой вопрос не специфичен только для oF; скорее, это общий вопрос о векторах C++ в целом.
Я хотел создать класс, который содержит несколько экземпляров другого класса, но также предоставляет интуитивно понятный интерфейс для взаимодействия с этими объектами. Внутри мой класс использовал вектор класса, но когда я пытался манипулировать объектом с помощью vector.at(), программа компилировалась, но не работала должным образом (в моем случае она не отображает видео).
// 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();
Где-то было предложено создать вектор указателей на объекты этого класса, а не вектор этих объектов. Я реализовал это и действительно работал как шарм.
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();
Я выделял память для объектов динамически, т.е. ofVideoPlayer = new ofVideoPlayer;
Мой вопрос прост: зачем использовать вектор указателей, и когда вы создадите вектор объектов по сравнению с вектором указателей на эти объекты?