栈控件临时对象的分配原则
今天调试代码发现自己有一个很基本的问题一直没有意识到:在一个函数里定义的临时对象,在后来再进入该函数时该临时对象并没有在栈上开辟新的空间。如下:
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"。一直以为临时对象是用一次在栈上分配一次,貌似这个观念错误了,临时对象的分配原则貌似还很智能的节约了一把。也许这就是为什么需要构造和析构原因吧。