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

C++中调用返回临时对象的成员函数后,对象销毁时机咨询

C++临时对象生命周期:调用成员函数后的销毁时机

首先得先指出你代码里的一个关键问题:B b1();这行不是创建B类的对象,而是声明了一个名为b1、返回B类型的函数!这会导致后续return b1;编译失败,因为你试图返回一个函数指针去匹配返回类型B。正确的写法应该是B b1;来实例化一个B对象,我们基于修正后的代码来分析你的问题。

回到你的核心问题:这个场景的行为是C++标准明确规定的,完全不依赖编译器实现。

标准规则说明

根据C++标准,临时对象的生命周期默认会持续到包含它的完整表达式(full-expression)结束时。所谓完整表达式,指的是不被嵌套在其他表达式中的独立表达式,简单来说就是单个语句中从开头到分号的整个逻辑。

结合你的代码分析

修正后的代码片段:

class B { int f2() { return 5; } };
class A { B f1() { B b1; return b1; } };
A var; int p = var.f1().f2();

在int p = var.f1().f2();这个语句中:

  1. var.f1()执行,返回一个临时的B对象;
  2. 这个临时对象被用来调用f2(),获取返回值5;
  3. 赋值操作完成,把5赋值给p;
  4. 整个完整表达式执行完毕,临时B对象才会被销毁。

也就是说,临时对象不会在f2()返回后立即销毁,而是存活到整个语句结束(当前作用域的这个语句执行完)。

补充说明:只有当临时对象被绑定到const左值引用或者右值引用时,它的生命周期才会被延长到引用的生命周期结束——但你的代码里没有这种情况,所以遵循默认的完整表达式结束销毁规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:53:07