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

The*_* do 1 c++ reference

伙计我几天前问了一个问题,没有时间检查它并考虑它,但现在我尝试了其中一个解决方案,我不明白为什么它有效?我的意思是为什么析构函数会在行尾调用,如下所示:

#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;
}
Run Code Online (Sandbox Code Playgroud)

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

Pet*_*der 7

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


fre*_*low 5

标准说:

临时对象被破坏,作为评估(词法上)包含创建它们的点的完整表达式的最后一步.

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