我已经阅读了 Michael Burr 关于引发异常的构造函数的精彩总结,这里是:以下代码会导致 C++ 中的内存泄漏
我的问题是:当从构造函数调用的函数引发异常时,行为是否相似?即,如果异常没有在它被抛出的地方被捕获,因此它会爬到构造函数并进一步爬到调用构造函数的函数。
我特别想知道该对象的类中包含的成员对象是什么,它们的析构函数会被调用吗?更具体地说,在我的例子中,它是关于 boost::shared_ptr 类型的成员。
考虑以下示例:
class A {
A() { throw some_exception }
};
class B {
B() { A a = new A(); }
};
class C {
boost::shared_ptr<B> p2b;
int i;
int *pint;
someclass objsomeclass;
someclass* psomeclass;
public:
C() {
objsomeclass = someclass();
psomeclass = new someclass();
pint = new int();
p2b(new B);
}
};
void foo()
{
C c();
}
main()
{
foo();
}
会调用 p2a 的析构函数吗?如果您能指出一个涵盖此案例的适当且可靠的资源,我将不胜感激。