在将push_back转换为std::list之后,对象似乎发生了变化。
这是push_back之前的对象:
看看在有效的m_parent_reference指针之后,它最终如何变为nullptr从而结束链。
这是我的对象在push_back()之后的外观
现在没有nullptr了。相反,一个parent_reference引用了其子级,从而创建了一个无休止的循环。
m_InterchangeList
类型为std::list<CKerEDIInterchange>
m_parent_reference
类型为CKerEDIReference
CKerEDIInterchange
继承自CKerEDIReference
CKerEDIInterchange
和CKerEDIReference
都没有自定义副本构造函数:m_parent_reference(parent_reference){};
使用自定义副本构造函数和分配运算符,我可以观察到以下内容:
编辑
更多信息:
{CKerEDIInterchange tmp(nInterchange);}
可以不会导致损坏的对象。
typestd::list<CKerEDIInterchange>
,如果类型为nInterchange,则为nInterchangeCKerEDIInterchange
我真的很想知道是否有人可以给我提示下一步要去哪里。
提前致谢,
尼克·帕帕乔吉欧(Nick Papagiorgio)
最佳答案
我找到了这种行为的原因。
显然,这些CKerEDIReference
对象之一已被删除。通过将新对象添加到列表中,新列表项被写入该已删除对象的内存中。我想这只是偶然,没有崩溃。