当对象没有完全构造时出现异常,应当怎么处理?


例如,如果派生类有虚基类和对象成员,那么在构造该派生类对象的过程中,需要先调用虚基类的构造函数和对象成员的构造函数,然后才能调用自己的构造函数。而如果在调用自己的构造函数之前引发了异常,该怎么办?这个时候可能虚基类或者对象成员已经构造好了,或者构造了一部分。这种情况下会出现已经分配好了一部分内存空间,该如何处理来防止这种情况下的内存泄露?

内存管理 C++

只是来看问题 12 years, 6 months ago

为了处理来自构造函数初始化式的异常,必须将构造函数编写为函数测试块(function try block).例如:

   
  template <class T> Handle<T>::Handle(T *p)
  
try : ptr(p), use(new size_t(1))
{
// function body
} catch(const std::bad_alloc &e)
{
handle_out_of_memory(e);
}

from C++ primer 4th edition

xyz龙加农 answered 12 years, 6 months ago

Your Answer