我有一個名爲「人類」級,並有人類的載體,我填充這樣說:爲什麼這個動態對象變得更改了?
humans.push_back(Human());
,並在另一個類,我指着這樣前面的人一個向量human*
:
cell.humans.push_back(&humans.back())
push_back函數在堆內存中創建對象,因此如果堆棧幀發生更改,對象將不會更改。但顯然,在一個不相關的函數定義像變量:
string foo = "a";
人類的一個屬性越來越無效,這是一個意外的行爲。 但是當我更改代碼在人類第一次矢量保持人類的這樣一個指針的方式:
humans.push_back(new Human())
cell.humans.push_back(humans.back())
的問題就解決了。調試程序,我甚至使用gdb並在更改的對象上設置了一個觀察點,但gdb在無限循環中獲得了庫存!
我該如何解釋這種行爲?
顯示更多的代碼。你的問題還不夠清楚。使用一些智能指針。 –