c++智能指针
构造函数可以抛出异常吗,有什么问题?
构造函数中应该避免抛出异常。
- 构造函数中抛出异常后,对象的析构函数将不会被执行
- 构造函数抛出异常时,本应该在析构函数中被delete的对象没有被delete,会导致内存泄露
- 当对象发生部分构造时,已经构造完毕的子对象(非动态分配)将会逆序地被析构。
初始化列表的异常怎么捕获?
- 初始化列表构造,当初始化列表出现异常时,程序还未进入函数体,因此函数体中的try-catch不能执行,catch也无法处理异常。可以通过函数try块解决该问题。
- 函数try块中的try出现在表示构造函数初始值列表的冒号以及表示构造函数体的花括号之前,与这个try关联的catch既能处理构造函数体抛出的异常,也能处理成员初始化列表抛出的异常。
析构函数可以抛出异常吗,有什么问题?
析构函数不应该抛出异常
- 其他正常,仅析构函数异常。 如果析构函数抛出异常,则异常点之后的程序不会执行,如果析构函数在异