2
看起來我的對象在執行push_back到std :: list後發生了變化。爲什麼我的對象在list :: push_back()之後改變
這是之前的push_back對象:
查看如何經過一番有效m_parent_reference指針時,它最終成爲nullptr從而結束鏈。
這是我對象的push_back後的外觀()
現在還沒有nullptr了。相反,一個parent_reference引用其子,創建一個永無止境的循環。
m_InterchangeList
的類型是std::list<CKerEDIInterchange>
m_parent_reference
的類型是從CKerEDIReference
- 無論
CKerEDIInterchange
也不CKerEDIReference
有一個自定義拷貝構造函數CKerEDIReference
CKerEDIInterchange
繼承- 我已經測試與Visual Studio 2010這一行爲SP1和Visual Studio 2012更新2
- 變量m_parent_reference只能通過構造
CKerEDIReference(const CKerEDIReference* const parent_reference = NULL) : m_parent_reference(parent_reference) {};
設置通過自定義的拷貝構造函數和賦值操作符,我可以注意以下幾點:
- 指定運營商從來不被稱爲
- 參考給` CKerEDIReference :: CKerEDIReference(const CKerEDIReference &)已經被破壞了,因爲它已經有了這個永無止境的循環。
編輯 更多的相關信息:
- 調用
{CKerEDIInterchange tmp(nInterchange);}
不 不會導致損壞的對象。 - 不涉及切片。 m_InterchangeList是
type std::list<CKerEDIInterchange>
和nInterchange如果類型CKerEDIInterchange
的我真的很想知道,如果任何人都可以給我一個提示去哪裏找下一個。
由於提前, 尼克Papagiorgio
你不應該發佈代碼,而不是*幫助重現問題。你應該發佈一些確實顯示問題的代碼。我們應該如何找出其他問題呢? – 2013-04-08 13:41:27
您的父引用是否有任何機會指向'm_InterchangeList'中的項目?因爲當列表內部調整大小時,指針變得無效。 – riv 2013-04-08 13:43:50
沒有拷貝構造函數,但是你的類是否具有析構函數? – john 2013-04-08 13:44:13