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

发布于 2017-01-22 01:38:45 字数 177 浏览 1254 评论 2

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

瑾兮 2017-07-13 04:16:21

为了处理来自构造函数初始化式的异常,必须将构造函数编写为函数测试块(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

浮生未歇 2017-03-13 21:23:45

一般来说,构造函数里面的错误是要构造函数自己吞掉的,要自己捕获吞掉

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文