相同的对象(由内存地址推导)构造两次而没有破坏

时间:2014-03-17 03:42:52

标签: c++ constructor destructor

请注意,我正在尝试编写一个小例子来复制此问题,但到目前为止,我没有这样的运气。有问题的代码是我不能放在这里的大型框架的一部分。

我有一个有一个数据成员的模板类。这个类的构造函数有副作用,只能在该对象上调用一次(假设ctor只能被调用一次 - 这应该是真的)。​​

经过一段时间试图找出为什么要进行两次调用之后,我暂时跟踪了对象的内存地址(使用地图),看看它是否确实是在没有析构函数的情况下重新构造的完全相同的对象调用(我取消跟踪析构函数中的地址,因此如果首先销毁原始对象,则另一个对象可以取而代之)。如果再次跟踪相同的地址(没有取消跟踪),跟踪器将触发断言。

我很困惑地看到对象的构造函数被调用了两次,而我的临时内存跟踪器会触发一个断言。使用断点进行调试可确认连续两次调用构造函数,而无需插入任何其他代码。也就是说,在退出对象的内存地址为xyz的类的构造函数之后,由于某种原因我再次进入它并且内存地址是相同的xyz

对此行为可能有什么解释? 我尽力解释。随意要求澄清。

1 个答案:

答案 0 :(得分:1)

为了将来参与遇到此类异常的人,嗯,这不是异常。

A pointer to a structure object points to its initial member(除非该类是多态的)。因此,在following code中,this的{​​{1}}指针指向foo<bar>,即第一个数据成员。

m_value