异常处理通过try-catch提升C++程序稳定性与可维护性;2. try块包含可能抛出异常的代码,catch块捕获并处理特定类型异常或所有异常;3. 示例中抛出std::runtime_error并由const std::exception&捕获,避免程序崩溃。
在C++中,异常处理是编写健壮代码的重要手段之一。通过合理使用try-catch机制,程序可以在出现错误时优雅地恢复或终止,而不是直接崩溃。这不仅提升了程序的稳定性,也增强了可维护性。
try-catch用于捕获和处理运行时可能发生的异常。try块中包含可能抛出异常的代码,catch块则负责处理这些异常。
示例:
try {
if (error_occurred) {
throw std::runtime_error("Something went wrong");
}
}
catch (const std::exception& e) {
std::cerr << "Exception caught: " << e.what() << std::endl;
}
catch (...) {
std::cerr << "Unknown exception caught" << std::endl;
}
C++标准库提供了丰富的异常类型,如std::invalid_argument、std::out_of_range等。在自定义逻辑中,建议从std::exception派生自己的异常类,以便统一处理。
例如:
class FileOpenError : public std::runtime_error {
public:
explicit FileOpenError(const std::string& filename)
: std::runtime_error("Cannot open file: " + filename) {}
};
编写异常安全代码时,需考虑以下三个层次的保证:
实现方式包括使用RAII(Resource Acquisition Is Initialization),将资源管理封装在对象中,如std::unique_ptr、std::lock_guard等,确保即使抛出异常也能正确释放资源。
如果一个正在处理异常的过程中又抛出新异常(即栈展开期间),程序会直接调用std::terminate()终止执行。因此,析构函数应尽量避免抛出异常。
例如:
~MyClass() {
try {
close_resource();
}
catch (...) {
// 记录错误,但不重新抛出
}
}
总结:合理使用try-catch、遵循异常安全
准则、结合RAII模式,能显著提升C++程序的健壮性。异常不是错误,而是程序流的一部分,正确处理它,才能写出可靠、易调试的代码。基本上就这些。