栈控件临时对象的分配原则

今天调试代码发现自己有一个很基本的问题一直没有意识到:在一个函数里定义的临时对象,在后来再进入该函数时该临时对象并没有在栈上开辟新的空间。如下:

struct A

{

  char szName[128];

  int nValue;

};

void CXXX::Do()

{

  A dTemp;

  int n =1;

  int b = 2;

  ...

  strcpy(dTemp.szName, "1111");

  dTemp.nValue = 2;

}

在第一次定义过dTemp后再进入Do(),断点设在int n处发现dTemp的地址和第一次一样,由于A中没有构造,发现dTemp里的值还是上一次的值"1111"。一直以为临时对象是用一次在栈上分配一次,貌似这个观念错误了,临时对象的分配原则貌似还很智能的节约了一把。也许这就是为什么需要构造和析构原因吧。

原文地址:https://www.cnblogs.com/CodeKnight/p/1874213.html