几天前我问过的人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被称为什么原因。
谢谢。
答案 0 :(得分:7)
coutn()
创建一个临时对象,它将在下一个序列点(在这种情况下为行尾)进行销毁。
答案 1 :(得分:5)
标准说:
临时对象被作为评估全表达式的最后一步而被销毁,该表达式(词法上)包含创建它们的点。
完整表达式是不是另一个表达式
的子表达式的表达式