c++ - 临时对象的取消引用运算符
问题描述
在这样的代码中
#include <iostream>
#include <memory>
struct A {
int i;
A() {
std::cout << "A()" << std::endl;
}
~A() {
std::cout << "~A()" << std::endl;
}
};
void f(const A& a) {
std::cout << "f(A)" << std::endl;
}
std::unique_ptr<A> make_a() {
return std::make_unique<A>();
}
int main() {
f(*make_a());
}
是否保证A
只有在执行后才会删除对象f()
?
解决方案
是的,它保证临时将在完整表达式之后被销毁,其中包括函数的调用f()
。
作为评估完整表达式的最后一步,所有临时对象都被销毁,该完整表达式(在词法上)包含创建它们的点,如果创建了多个临时对象,它们将按照与创建顺序相反的顺序被销毁。即使评估以抛出异常结束也是如此。
推荐阅读
- flutter - 容器的顶部是彩色的,但其余部分是白色的。如何在颤动中做到这一点?
- c++ - c ++如何从文本文件中的特定行读取和写入?
- android - 如何使用 RxJava 2 Android 对来自传感器的微秒内实时数据进行计数、比较和存储在数组中
- c - 需要帮助弄清楚为什么循环中的这个 C 管道会因两次以上的迭代而失败
- random - 您可以对列表的分区进行多少组合以最小化重复?
- python - 如何在特定时间范围内(如上午 9 点至下午 3 点)在 matplotlib 中绘制时间序列数据?
- php - How to include .'\1' in replace pattern in regular expression preg_replace command in php
- c# - UWP C# MVVM 时钟示例
- bash - GitHub Actions:从 Gradle 命令捕获多个控制台行
- event-handling - “如何为重启 apache 服务创建事件处理程序”