【发布时间】:2014-11-10 08:53:03
【问题描述】:
对不起我的英语。
某类:
class Kid {
public:
...
string _name;
std::list<string> _cuteKids;
};
使用类:
std::list<Kid> kids;
kids.push_back(new Kid("Jeck"));
kids.push_back(new Kid("Anna"));
kids.push_back(new Kid("Toma"));
for(auto e: kids) {
e._cuteKids.push_back("Jeck"); // Many some names...
[1]
}
[2]
如果您查看调试器中的代码,第 1 段中的列表 _cuteKids - 有项目。但是如果查看第 2 段中的列表 _cuteKids - 没有项目。为什么?
这只是一个例子,实际上我的算法复杂得多,但底线是循环后 _cuteKids 变为空。就好像它是一个静态变量(e: kids),而不是一个指向kids变量的指针。
【问题讨论】:
-
为什么
Kid包含“可爱的孩子”列表?一个孩子就是一个孩子。一个孩子不包含其他孩子。这毫无意义。您也有间接级别的问题。给定std::list<Kid> kids;,kids.push_back(new kid("xxx");无法编译--new给出了一个指针,但您试图将该指针作为它所引用的对象插入。 -
奇怪的是你有
std::list<Kid> kids;,然后你使用new添加新的kids:kids.push_back(new Kid("Jeck"));... -
_cuteKids - 是一个爱孩子的孩子名单。这份工作,它不会改变。
标签: c++ list foreach containers std