【发布时间】:2019-06-13 19:05:50
【问题描述】:
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++ 中,所以我认为字符串没问题)而且我不认为这是一个局部变量问题......
【问题讨论】:
-
在
w不复存在之后,您认为&w指向哪个Word? -
//irrelevant for the question。所以不要把它包括在问题中。 -
我建议你停止使用原始指针并且不要使用
new,除非你明确知道你需要它并且了解对象生命周期和手动内存管理。