在写这篇文章之前,一直没有注意过C++中临时对象何时调用析构的。直到最近看代码的过程中遇到这种情况。
由于不了解临时对象何时调用析构函数,所以很不了解代码的实现。甚至还用局部对象的析构时机去看待。先讲讲自己遇到的情况:博主是在看mudo日志库时候遇到的,在mudo日志库中类Logger的析构函数回去获取输入的Buffer,并写入到文件或标准输出。实现在需要打印日志的地方会创建临时对象Logger,由于在该临时对象析构时才会输出。因此,理解何时调用就至关重要了。
首先,我们先看看局部对象的构造和析构的调用时机。
#include <iostream>
#include <string>
using namespace std;
class CPartObj
{
public:
CPartObj(string strInfo)
:m_strInfo(strInfo)
{
cout << "CPartObj" << m_strInfo << endl;
}
~CPartObj()
{
cout << "~CPartObj" << m_strInfo << endl;
}
private:
string m_strInfo;
};
void Function(void)
{
CPartObj Obj1("Obj1");
CPartObj Obj2("Obj2");
CPartObj Obj3("Obj3");
}
int main(void)
{
Function();
r