Либо указатель на вектор недействителен, либо указатели в векторе недействительны; вероятно, первый в этом случае. Это происходит во многих ситуациях, например, с использованием указателей на локальные объекты, которые с тех пор были уничтожены.
(в стороне:. Учитывая, что вы включили точку с запятой для окна, я уверен, что это элемент данных, а не параметр)
Вместо того чтобы хранить векторный указатель в App Store, сохранить сам вектор. Вместо хранения указателей на объекты Window, храните сами объекты Window.
struct App {
vector<Window> windows;
};
Однако для этого требуется, чтобы Windows была пригодна для копирования, и, вероятно, нет. Он также запрещает хранение объектов типов, полученных из окна. Вместо этого, вы можете использовать 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());
}
};
Было бы полезно, чтобы увидеть некоторые код. Единственное, что я могу предположить, это то, что он действительно является указателем на вектор, а не на вектор. – skimobear