C++ Primer 5th笔记(chap 18 大型程序工具)函数 try 语句块与构造函数
Posted thefist11
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ Primer 5th笔记(chap 18 大型程序工具)函数 try 语句块与构造函数相关的知识,希望对你有一定的参考价值。
1. 问题
构造函数在进入函数体之前首先执行初始化列表。因为在初始值列表抛出异常时构造函数体内的try语句块还未生效
1.1 解决方法
{
// 这是处理构造函数初始值错误的唯一方法
template <typename T>
Blob<T>::Blob(initializer_list<T> il) try :
data(make_shared<vector<T>>(il)) {
// 空函数体
} catch (const bad_alloc &e) {
handle_out_of_memory(e);
}
// 关键字try出现在
// 表示构造函数初始值列表的冒号
// 以及表示构造函数体的扩阔好
// 之前
// 与之歌try关联的catch既可以处理函数体也可以处理初始化列表
// 注意,在初始化构造函数的参数时,也可能会发生异常
// 这样的异常不属于函数try语句块的一部分
// 而是属于调用表达式的一部分,并将在调用者所在的上下文中处理。
}
以上是关于C++ Primer 5th笔记(chap 18 大型程序工具)函数 try 语句块与构造函数的主要内容,如果未能解决你的问题,请参考以下文章
C++ Primer 5th笔记(chap 18 大型程序工具)noexcept
C++ Primer 5th笔记(chap 18 大型程序工具)异常处理
C++ Primer 5th笔记(chap 18 大型程序工具)捕获异常
C++ Primer 5th笔记(chap 18 大型程序工具)命名空间特性