You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

用栈局部对象值为堆指针指向对象赋值是否为未定义行为?u指针何时被删除?

1. 栈局部对象e赋值给堆对象*d是否属于未定义行为?

完全不属于未定义行为。这里的*d = e是赋值操作,本质是把栈上对象e的内容拷贝到指针d指向的堆内存对象里。由于类A没有自定义赋值运算符,编译器会生成默认的逐成员赋值逻辑,而A类内部没有管理任何动态资源(比如堆指针、外部句柄),所以这个拷贝过程是安全合法的。

当f函数执行完毕时,栈上的e会被销毁(触发析构输出~A),但此时堆对象*d已经完成了内容拷贝,e的销毁不会对它造成任何影响。

2. 指针u指向的对象何时被删除?

u指向的堆对象会在main函数执行到delete u;语句时被销毁,同时触发A类的析构函数输出~A。

另外要明确:f里的局部对象e的销毁时机是f函数结束时(栈帧弹出),这和u指向的堆对象的生命周期完全无关,两者各自管理自己的内存。

内容的提问来源于stack exchange,提问作者tTt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 19:54:58