比如我有一个简单的代码:C++ new操作符是如何工作的内部
class B
{
};
class A
{
B b;
public:
A()
{
throw 1;
}
};
int main()
{
A* a = 0;
try
{
a = new A;
}
catch (int)
{
}
}
构造函数抛出异常,那么析构函数不会被调用。但是B的析构函数会被调用。堆中的内存不会被分配。我的问题如何在内部工作?首先会是:构造A还是在堆中分配内存?那么,如果分配是第一个,如果存在异常,将如何解除分配?别的,如果构建A是第一个,它是如何应对堆的?
谢谢,你的评论很好,但我需要更多的信息。在堆内存中提供析构函数的机制是什么? – M90
@ M90,我认为这个机制是特定于实现的。就像我说的,一个看不见的'try-finally'块。就像,如果出现问题,控制权转移到一些自动生成的代码,负责照顾任何需求,然后继续传播异常。编译你的代码到程序集中,看看它*真正的作用,如果你真的好奇。 –
@ M90另请参见草药萨特的[构造失败...](http://www.gotw.ca/publications/mill13。htm) –