我正在使用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;
我的问题很简单:为什么使用指针向量有效,什么情况下会创建一个对象向量与一个指向这些对象的指针向量?
vector
的使用,而是ofVideoPlayer
类本身。 - Steve Townsend