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
相关产品推荐
相关产品推荐

