今天早上我遇到了一些令我有点困惑的事情。在查看其他问题时,我偶然发现了我认为是一个错误,但看了一会儿我不确定是不是。我仍然对这种行为感到困惑。
拿代码:
Class Coordinate
{
double xyz[3];
...
}
void function()
{
Coordinate localCoords = someOtherCoords; //Copy constructor just copies values, no pointer assignment.
//At this point the watch window lists the address of localCoords.xyz as e.g. 0x0012e7c4
//More code, none of which should be modifying localCoords in any way ...
//Now localCoords.xyz is at e.g. 0x00128cc0, and it's internal values have, unsurprisingly, changed.
//More code, again not modifying localCoords.
//localCoords.xyz is magically restored to its earlier address and contents.
AnotherFunction(localCoords); //Correct value(s) passed.
}
现在我理解编译器(VC ++ 6)可以自由地进行,因为它希望关于临时内存分配,但是当查看dissasembler时,地址更改的点不是引用localCoords或其任何成员(它& #39;比较两个bool,就好了。)
我认为给定的localCoords没有以任何方式嵌套,因此功能范围广泛,它的结构在整个函数中都是持久的,但似乎并非如此。 / p>
这段代码已经工作多年了,而且仍然有效,所以我想这只是一个普遍的问题,关于这类事情可以预期的行为,也许可以节省我浪费时间追逐不存在的错误将来
欢呼任何输入。