MST
星途 面试题库

面试题:C++ 异常安全保证之基本理解

在C++中,简述什么是异常安全的基本保证(basic exception safety guarantee),并举例说明如何编写一个函数以满足该保证。
41.0万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

异常安全的基本保证

在C++中,异常安全的基本保证指的是当异常抛出时,程序的状态仍然保持有效,没有资源泄漏,并且所有对象都处于一个有效状态,不过对象的状态可能和异常发生前不完全一样。

示例代码

#include <iostream>
#include <vector>

class Resource {
public:
    Resource() { std::cout << "Resource constructed" << std::endl; }
    ~Resource() { std::cout << "Resource destructed" << std::endl; }
};

// 满足基本异常安全保证的函数
std::vector<Resource> createResources(int count) {
    std::vector<Resource> resources;
    for (int i = 0; i < count; ++i) {
        try {
            resources.emplace_back();
        } catch(...) {
            // 这里可以进行一些清理操作,比如记录日志等
            std::cerr << "Exception caught while creating resource" << std::endl;
            throw;
        }
    }
    return resources;
}

在上述示例中,createResources函数在向std::vector中添加Resource对象时,使用try - catch块来捕获可能抛出的异常。如果在构造Resource对象时抛出异常,std::vector已经添加的对象会被正确析构,不会造成资源泄漏,满足基本异常安全保证。如果没有异常抛出,函数正常返回包含所有构造好的Resource对象的std::vector