我试图找出临时变量何时被释放。我写了下面的代码。
#include <stdio.h>
class C
{
public:
C()
{
printf("C O\n");
}
C(const C&)
{
printf("C& O\n");
}
virtual ~C()
{
printf("C D\n");
}
};
int kkk(const C&)
{
printf("kkk\n");
return 0;
}
int kkk2(int)
{
printf("kkk2\n");
return 0;
}
int main()
{
(kkk2( kkk2( (kkk(C()),3) ) ), printf("dsfsdfs\n"), true) && (printf("dsdddf\n"),true);
printf("=====\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我期望C类在被调用后被释放kkk,但实际上,结果是:
C O
kkk
kkk2
kkk2
dsfsdfs
dsdddf
C D
=====
Run Code Online (Sandbox Code Playgroud)
我用 g++ clang++ 和 msvc++ 运行代码,结果是一样的。C 类在声明结束时释放。
在语句末尾释放临时变量是 C++ 标准吗?
所有临时对象都将在评估(词法上)包含它们创建点的完整表达式的最后一步被销毁,如果创建了多个临时对象,则它们将按照与创建顺序相反的顺序被销毁。即使该评估最终引发异常也是如此。
有两个例外:[..]
所以回答你的问题:
在句尾释放临时变量是C++标准吗?
是的,临时变量在完整表达(不是句子)结束时被销毁。
| 归档时间: |
|
| 查看次数: |
172 次 |
| 最近记录: |