Skip to content

RAII的数据库连接池 #87

Open
@Iseulf

Description

@Iseulf
class SqlConnRAII {
public:
    SqlConnRAII(MYSQL** sql, SqlConnPool *connpool) {
        assert(connpool);
        *sql = connpool->GetConn();
        sql_ = *sql;
        connpool_ = connpool;
    }
    
    ~SqlConnRAII() {
        if(sql_) { connpool_->FreeConn(sql_); }
    }
    
private:
    MYSQL *sql_;
    SqlConnPool* connpool_;
};

这里采用的是初始化外部变量sql的做法,会FreeConn(sql)执行了两次。为什么不把SqlConnRAII写成unique_ptr那种智能指针的形式呢。

如源码这里,定义了一个匿名变量,那析构函数就会立刻执行,那sql就会立刻被释放,而后源码中又执行了一次FreeConn。
image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions