什么决定了什么时候在C ++中为一个临时对象调用析构函数?

时间:2010-06-17 08:47:19

标签: c++ reference

几天前我问过的人a question 并没有时间检查并考虑它,但现在我尝试了其中一种解决方案,我无法理解为什么会这样做工作?我的意思是为什么在这样的行尾调用析构函数:

#include "stdafx.h"
#include "coutn.h"
#define  coutn coutn()
int _tmain(int argc, _TCHAR* argv[])
{
    coutn << "Line one " << 1;//WHY DTOR IS CALLED HERE
    coutn << "Line two " << " and some text.";
    return 0;
}

我认为它与对象的生命周期有关,但我不确定是什么以及如何做。我想到它有两个未命名的对象,但它们没有超出范围,所以我无法理解dtor被称为什么原因。 谢谢。

2 个答案:

答案 0 :(得分:7)

coutn()创建一个临时对象,它将在下一个序列点(在这种情况下为行尾)进行销毁。

答案 1 :(得分:5)

标准说:

  

临时对象被作为评估全表达式的最后一步而被销毁,该表达式(词法上)包含创建它们的点。

     

完整表达式是不是另一个表达式

的子表达式的表达式