C++ 类、构造函数与 RAII

1 min read [C/C++零基础到大神] post #cpp#class#raii

类把数据和操作封装在一起。

class File {
public:
    explicit File(const char* path);
    ~File();
private:
    int fd_;
};

构造与析构

构造函数负责建立对象不变量,析构函数负责释放资源。

RAII 的核心是:资源获取即初始化。对象活着时资源有效,对象销毁时资源释放。

为什么重要

RAII 可以让异常、提前返回、复杂分支下的资源释放都变得可靠。

标准库里的 std::lock_guardstd::unique_ptr 都是 RAII 的典型例子。

RAII 更像一种纪律

RAII 的好处在简单例子里不明显,但在真实项目里非常关键。比如一个函数里打开文件、申请内存、加锁,然后中间任意一步失败。如果靠手写 closedeleteunlock,每个分支都要记得清理资源,非常容易漏。

用 RAII 后,资源释放变成对象析构的一部分:

void write_log() {
    std::ofstream file{"app.log"};
    std::lock_guard<std::mutex> lock{g_mutex};
    file << "hello\n";
}

函数正常结束、提前返回,甚至抛异常,局部对象都会按逆序析构。

类设计的基本问题

设计一个类时,我通常会先问:

这些问题比“类里放几个字段”更重要。

评论

...

正在读取评论。