发布于2026-06-30 阅读(0)
扫一扫,手机访问
在Ubuntu环境下用C++写程序,异常处理是个绕不开的话题。怎么做?其实有一套标准流程,从基础的头文件包含到高级的自定义异常,每一步都挺关键。下面咱们就掰开揉碎聊聊。

先把基础打牢:头文件是必须请进来的。C++标准库里的异常类都在这儿,少了它,后面的try-catch就没了根基。
#include
接下来是核心招式——try-catch块。把可能出问题的代码用try包起来,一旦异常抛出,控制流会立刻跳到类型匹配的catch里。这里有个小技巧:先捕获具体的异常类型(比如std::exception及其派生类),最后用catch (...)兜底,处理那些未知的“意外”。
try {
// 可能抛出异常的代码
} catch (const std::exception& e) {
std::cerr << "Caught exception: " << e.what() << std::endl;
} catch (...) {
std::cerr << "Caught unknown exception" << std::endl;
}
当你需要主动报告错误时,throw关键字就派上用场了。直接抛出一个继承自std::exception的对象,比如std::runtime_error,让上层代码去处理。
if (/* 某个错误条件 */) {
throw std::runtime_error("An error occurred");
}
标准库提供的异常类型有时候不够用——比如你想表达“数据库连接超时”这种业务语义。这时候自定义异常类就很有必要了。继承std::exception,重写what()方法,返回一段清晰的描述信息。
class MyException : public std::exception {
public:
const char* what() const noexcept override {
return "My custom exception message";
}
};
异常处理最容易踩的坑是资源泄漏。一旦抛出异常,栈展开过程中那些手动分配的内存、打开的文件、网络连接可能就没人管了。C++的解决方案很优雅:RAII(资源获取即初始化)。用std::unique_ptr、std::shared_ptr这类智能指针,或者让资源在构造函数中获取、析构函数中释放,异常发生时也能自动清理。省心。
最后提一嘴编译器选项。GCC默认是开启异常处理的(-fexceptions),但如果你的项目对性能或体积有极致要求,并且确认不会用到异常,可以用-fno-exceptions关掉它。不过大多数场景下,保持默认就好。
g++ -fexceptions -o myprogram myprogram.cpp
把这些步骤串起来,在Ubuntu上写C++异常处理就清晰多了。好的异常处理不只是让程序不崩溃,更是在错误发生时给出明确的反馈,同时确保资源安全——这才是健壮代码该有的样子。
上一篇:dhclient配置错误怎么解决
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8