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 大型程序工具)命名空间特性

C++ Primer 5th笔记(chap 18 大型程序工具) 重载与命名空间

C++ Primer 5th笔记(chap 18 大型程序工具)构造函数与虚继承