看完我的对象后,我将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
都没有自定义复制构造函数CKerEDIReference(const CKerEDIReference* const parent_reference = NULL) : m_parent_reference(parent_reference) {};
使用自定义复制构造函数和赋值运算符,我可以观察到以下内容:
修改 更多信息:
{CKerEDIInterchange tmp(nInterchange);}
不会导致物体损坏。type
std::list<CKerEDIInterchange>
,nInterchange是类型
CKerEDIInterchange
我真的很想知道是否有人可以给我一个提示在哪里看下一步。
提前致谢, Nick Papagiorgio
答案 0 :(得分:0)
我找到了这种行为的原因。
显然,其中一个CKerEDIReference
对象已被删除。通过将新对象添加到列表中,新的列表项被写入该已删除对象的内存中。我想这只是纯粹的巧合,它并没有崩溃。