C++-当对象没有完全构造时出现异常,应当怎么处理?
例如,如果派生类有虚基类和对象成员,那么在构造该派生类对象的过程中,需要先调用虚基类的构造函数和对象成员的构造函数,然后才能调用自己的构造函数。而如果在调用自己的构造函数之前引发了异常,该怎么办?这个时候可能虚基类或者对象成员已经构造好了,或者构造了一部分。这种情况下会出现已经分配好了一部分内存空间,该如何处理来防止这种情况下的内存泄露?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
为了处理来自构造函数初始化式的异常,必须将构造函数编写为函数测试块(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
一般来说,构造函数里面的错误是要构造函数自己吞掉的,要自己捕获吞掉