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