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

C++中此场景下右值对象的析构时机是否固定在此处?

临时右值对象的析构时机确认

首先看你的代码:

class SomeType {
public:
SomeType() {}
~SomeType() {}

std::string xxx;
};
bool funtion_ab() {
    SomeType(); // 这里创建的是临时右值对象
    // 测试中发现对象在此处析构,确认该时机是否固定
    int a = 0, b = 10;
    // ...其他代码
    return true; 
} 

答案是肯定的,这个临时对象的析构时机完全固定,符合C++标准的明确规定:

  • 这种直接通过SomeType();创建的临时对象,属于无名临时对象,它的生命周期仅覆盖创建它的那个完整表达式。
  • 这里的完整表达式就是SomeType();这条语句本身,一旦这条语句执行完毕,临时对象就会立刻被析构,不会延续到后续代码执行阶段。
  • 无论编译器开启何种优化等级、使用哪个版本的C++标准,这个行为都是一致的,你可以放心依赖这个析构时机。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 04:40:33