内存中的局部变量持久性(C ++)

时间:2014-07-04 10:46:11

标签: c++

今天早上我遇到了一些令我有点困惑的事情。在查看其他问题时,我偶然发现了我认为是一个错误,但看了一会儿我不确定是不是。我仍然对这种行为感到困惑。

拿代码:

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>

这段代码已经工作多年了,而且仍然有效,所以我想这只是一个普遍的问题,关于这类事情可以预期的行为,也许可以节省我浪费时间追逐不存在的错误将来

欢呼任何输入。

0 个答案:

没有答案