在我研究异常机制的过程中,我发现在堆栈展开时会调用对象字段的析构函数。让我明确解释一下:
class X
{
File_ptr aa;
Lock_ptr bb;
public:
X(const char* x,const char* y):aa(x),bb(y){}
//.......
}
所以,现在如果 Lock_ptr 的构造函数抛出异常,对象aa将被销毁;问题是“为什么”?我一直认为对象的文件不是通常的自动(本地)对象。它们是在构造函数初始化它们之前创建的。所以它们超出构造函数的范围后不能被销毁(否则它们会被销毁)构造函数完成了它的工作)