Кто-нибудь, пожалуйста, взгляните на следующие фрагменты кода (все из одного файла) и порекомендуете проблему, которую я опишу в конце?
члены:
std::vector<cHasAMyClass> collected;
std::vector<cHasACHasAMyClass> memberVector;//Actually an array of vectors, but simpler not to be.
конструкторвнутреннего / локального класса:
cHasACHasAMyClass(cHasAMyClass *ptrToCHasAMyC, int stuff) :
masterRef(ptrToCHasAMyC),
other_stuff(stuff) {}
метод, который я использовал:
cHasAMyClass *firstUniqueOccurrence(std::vector<cHasAMyClass> *masterList, myClass *qSq) {
for (int i = 0; i < (int)masterList->size(); ++i)
if ((*masterList)[i].myClassPtr == qSq) return &((*masterList)[i]);
masterList->push_back(cHasAMyClass(qSq));
return &(masterList->back());
}
блок, который вызывает метод выше:
{
std::vector<myClass *> allAtLoc;
if (map->getAllHere(curLoc, &allAtLoc)) {
for (int i = 0; i < (int)allAtLoc.size(); ++i) {
int stuff = 42; //Or otherwise
cHasAMyClass *newContainer = firstUniqueOccurrence(&(collected), allAtLoc[i]);
memberVector.push_back(cHasACHasAMyClass(newContainer, stuff));
}
}
allAtLoc.clear();
}
Проблема немного позже (Хорошо, сразу после выхода из вышеуказанного блока) memberVector[0].masterRef
кажется испорченным, что я обнаруживаю (кроме сбоя), потому что его член типа myClass
недействителен или пуст.Я думал, что установил указатель на постоянный объект (управляемый в другой структуре данных, простой массив (/ ptr - это new
/ malloc
'd)), но я новичок в использовании векторов и не уверен, чтосвоего рода косвенность, свидетелем которой я был.
У меня allAtLoc
и newContainer
выходят из области видимости, и хотя они всего лишь указатели на объекты, у них есть побочные эффекты.Кстати, мой collected
вектор не содержит ошибок.
До того, как я перешел на std::vector
s, все работало нормально, я не понимаю, как неверно мое перенаправление, пожалуйста, кто-нибудь может посоветовать