面试题答案
一键面试异常安全的基本保证
在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
。