struct Word {
string wordName; //loses its value
vector<string> contents; //irrelevant for the question
int numContents = 0; //maintains its value
};
vector<Word*> wordMsgs;
int main()
{
vector<string> result;
result.push_back("wordName");
result.push_back("shouldEnterIf");
Word curr;
//New Word
if (result[1] != "") {
Word w;
w.numContents = 10; //just a testing #, suppose to represent size of vector
wordMsgs.push_back(&w);
w.wordName = result[0]; //name of Word
//here w.wordName and (*wordMsgs[0]).wordName display the same string; result[0]
curr = w;
}
//here curr.wordName displays result[0] but (*wordMsgs[0]).wordName doesn't. However, (*wordMsgs[0]).numContents returns 10 as expected
}
}
Итак, у меня есть вектор структурных ссылок, предполагая, что метод push_back () для векторов только выдвигает копию в конец вектора.Я создаю экземпляр моей структуры Word и помещаю эту ссылку в мой вектор, wordMsgs.Затем я редактирую структуру, на которую он указывает, и затем моя строковая переменная теряется при выходе из оператора if!Однако моя переменная int никогда не теряет своего значения.Я не понимаю, потому что я использовал указатели (и я на C ++, поэтому я думал, что строки были в порядке), и я не думаю, что это проблема локальной переменной ...