在我的C ++项目中,我有一个类App和一个类Window。 Class App有一个参数:vector<Window*>* window;
。
在App的构造函数中,它可以使用和push_back一个Window *到这个向量上,但在我的onMessage()方法中,由WndProc()调用(我使用的是winapi),它给了我一个我尝试使用向量时出现运行时错误。这些是访问错误。
究竟什么可能出错?如果您还需要更多信息,请询问。
答案 0 :(得分:2)
指向向量的指针无效或向量中的指针无效;在这种情况下可能是前者。在许多情况下都会发生这种情况,例如使用指向已被破坏的本地对象的指针。
(旁白:假设你在窗口中加了一个分号,我敢打赌这是一个数据成员而不是参数。)
不是在App中存储矢量指针,而是存储矢量本身。不是存储指向Window对象的指针,而是自己存储Window对象。
struct App {
vector<Window> windows;
};
但是,这需要Windows可以复制,而它们可能不是。它也不允许存储从Window派生的类型的对象。相反,您可以使用boost::ptr_vector,它“拥有”指向的对象,并在删除它们时删除它们(例如当ptr_vector被销毁或清除时):
struct App {
boost::ptr_vector<Window> windows;
App() {
// just an example
windows.push_back(new Window());
windows.push_back(new DerivedFromWindow());
}
};