我正在研究一個有兩個列表的程序。列表中的一個存儲對象。另一個列表存儲指向包含對象的列表項的指針。當一個新項目被添加到對象列表中時,我想獲取指向該對象的指針。但我總是得到相同的指針返回。爲什麼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