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

本文通过一个具体的代码示例,揭示了在C++中栈上临时对象的行为特性。作者最初认为每次函数调用时,临时对象都会在栈上重新分配空间,但实际上,如果临时对象没有被显式销毁,它可能会保留上次的值。这一特性对于理解C++中的资源管理和对象生命周期至关重要。
摘要由CSDN通过智能技术生成

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

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/archive/2010/11/10/1874213.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值