我正在研究一个有两个列表的程序。列表中的一个存储对象。另一个列表存储指向包含对象的列表项的指针。当一个新项目被添加到对象列表中时,我想获取指向该对象的指针。但我总是得到相同的指针返回。为什么list.end()在添加新项目时没有改变?
因为我的计划是到大,现在我做了一个新的,一个小的为您展示问题:
#include <iostream>
#include <list>
using namespace std;
class C_Test
{
public:
int a;
};
int main()
{
std::list<class C_Test> Testlist;
C_Test A;
C_Test B;
Testlist.push_back(A);
C_Test * p = &*Testlist.end();
cout << p << endl;
Testlist.push_back(B);
p = &*Testlist.end();
cout << p;
}
结果:
0x22fe20
0x22fe20
我期望PROGRAMM打印出两个不同的自列表结束后的指针应该改变了?为什么它给了我两次相同的指针?
我真的很感谢你在这件事上的帮助。
为什么你会希望它真正改变? –
'&* Testlist.end()'是未定义的行为。 – Cornstalks
'.end()'不是最后一个项目,也不是一个项目。这是*最后一个*之后的*假*项目。因为它只是一个标记它并不存在于列表本身中。 – HolyBlackCat