【发布时间】:2012-08-18 17:21:55
【问题描述】:
假设我们有一个带有构造函数的类:
class MyClass
{
public:
MyClass()
{
//our code goes here
throw "OMG";//well, some code that throws an exception
}
};
现在,当发生异常时,正在执行堆栈展开。我也知道,如果从构造函数中抛出异常,相应对象的析构函数将不会被调用,因为对象从一开始就没有完全“创建”。
我对此有点困惑。对我来说,这意味着该对象仅在构造函数完成时才被视为“已创建”。但显然,所有内存都分配在构造函数调用之前(或之后)的某个位置,因为我们可以在构造函数中操作对象的成员。
那么究竟什么时候在内存中创建了对象,导致异常的对象的内存发生了什么?
【问题讨论】:
标签: c++ memory exception-handling constructor