我正在开发一个有两个列表的程序。其中一个列表存储对象。另一个列表存储指向包含对象的列表项的指针。当一个新项添加到对象列表时,我想获得指向该对象的指针。但我总是得到相同的指针返回。
由于我的程序很大,我现在制作了一个新的,较小的程序来向您展示问题:
#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
我希望程序打印出两个不同的指针,因为列表的末尾应该已经改变了?为什么它会给我两倍相同的指针?
我非常感谢你在这件事上的帮助。
答案 0 :(得分:3)
对于启动程序,取消引用成员函数end
返回的迭代器具有未定义的行为。
我认为你的意思是
C_Test * p = &Testlist.back();