代码之家  ›  专栏  ›  技术社区  ›  Alexander Rafferty

访问矢量时出错

  •  0
  • Alexander Rafferty  · 技术社区  · 15 年前

    在我的C++项目中,我有一个类应用程序和一个类窗口。类应用程序有一个参数: vector<Window*>* window; .

    在app的构造函数中,它可以使用并将窗口*向后推到这个向量上,但是在wndproc()调用的onmessage()方法中(我使用的是winapi),当我尝试使用向量时,它会给我一个运行时错误。这些是访问错误。

    到底出了什么问题?如果您需要更多信息,只需询问。

    1 回复  |  直到 15 年前
        1
  •  2
  •   Roger Pate    15 年前

    指向向量的指针无效或向量中的指针无效;在本例中可能是前者。这在许多情况下都会发生,例如使用指向本地对象的指针,这些对象已经被销毁。

    (除此之外:考虑到您为window添加了分号,我打赌这是一个数据成员而不是参数。)

    不要在应用程序中存储向量指针,而是存储向量本身。不存储指向窗口对象的指针,而是自行存储窗口对象。

    struct App {
      vector<Window> windows;
    };
    

    但是,这要求窗口是可复制的,而它们可能不是可复制的。它也不允许存储从窗口派生的类型的对象。相反,您可以使用 boost::ptr_vector ,它“拥有”指向对象,并在删除它们时将其删除(例如,当ptr_向量被销毁或清除时):

    struct App {
      boost::ptr_vector<Window> windows;
    
      App() {
        // just an example
        windows.push_back(new Window());
        windows.push_back(new DerivedFromWindow());
      }
    };