Closed InitialZJ closed 4 months ago
UserVerify函数内SqlConnRAII(&sql, SqlConnPool::Instance());这段代码也声明了一个临时对象后马上被析构,内部的sql连接已经free,而外部的sql还指向原链接,这个是不是也有点问题?
UserVerify函数内SqlConnRAII(&sql, SqlConnPool::Instance());这段代码也声明了一个临时对象后马上被析构,内部的sql连接已经free,而外部的sql还指向原链接,这个是不是也有点问题?
这里只有到花括号结束才会析构,也就是生命周期是整个函数。
UserVerify函数内SqlConnRAII(&sql, SqlConnPool::Instance());这段代码也声明了一个临时对象后马上被析构,内部的sql连接已经free,而外部的sql还指向原链接,这个是不是也有点问题?
这里只有到花括号结束才会析构,也就是生命周期是整个函数。
懂了,感谢 😇
UserVerify函数内SqlConnRAII(&sql, SqlConnPool::Instance());这段代码也声明了一个临时对象后马上被析构,内部的sql连接已经free,而外部的sql还指向原链接,这个是不是也有点问题?
这里只有到花括号结束才会析构,也就是生命周期是整个函数。
匿名实例应该是这句代码结束就会析构吧
UserVerify函数内SqlConnRAII(&sql, SqlConnPool::Instance());这段代码也声明了一个临时对象后马上被析构,内部的sql连接已经free,而外部的sql还指向原链接,这个是不是也有点问题?
这里只有到花括号结束才会析构,也就是生命周期是整个函数。
匿名实例应该是这句代码结束就会析构吧
你是对的,我搞错了,那这里还是有点问题。
UserVerify函数内SqlConnRAII(&sql, SqlConnPool::Instance());这段代码也声明了一个临时对象后马上被析构,内部的sql连接已经free,而外部的sql还指向原链接,这个是不是也有点问题?
这里只有到花括号结束才会析构,也就是生命周期是整个函数。
匿名实例应该是这句代码结束就会析构吧
是的,可能是因为数据库连接池初始化有10个连接,然后这个用户验证耗时又少,所以程序运行没有问题,我将连接池改成只有一个连接,多开几个网页同时登陆,也能够正常运行😰
UserVerify函数内SqlConnRAII(&sql, SqlConnPool::Instance());这段代码也声明了一个临时对象后马上被析构,内部的sql连接已经free,而外部的sql还指向原链接,这个是不是也有点问题?
这里只有到花括号结束才会析构,也就是生命周期是整个函数。
匿名实例应该是这句代码结束就会析构吧
是的,可能是因为数据库连接池初始化有10个连接,然后这个用户验证耗时又少,所以程序运行没有问题,我将连接池改成只有一个连接,多开几个网页同时登陆,也能够正常运行😰
原来如此
UserVerify函数内SqlConnRAII(&sql, SqlConnPool::Instance());这段代码也声明了一个临时对象后马上被析构,内部的sql连接已经free,而外部的sql还指向原链接,这个是不是也有点问题?
这里只有到花括号结束才会析构,也就是生命周期是整个函数。
匿名实例应该是这句代码结束就会析构吧
是的,可能是因为数据库连接池初始化有10个连接,然后这个用户验证耗时又少,所以程序运行没有问题,我将连接池改成只有一个连接,多开几个网页同时登陆,也能够正常运行😰
原来如此
那正确逻辑应该是不要创建匿名对象,然后把SqlConnPool::Instance()->FreeConn(sql); 删去吧,这样逻辑应该就对了吧
SqlConnRAII(&sql, SqlConnPool::Instance());改成创建具名对象SqlConnRAII raii(&sql, SqlConnPool::Instance());的形式,然后删去后面手动释放的SqlConnPool::Instance()->FreeConn(sql);
httprequest.cpp
中第233行SqlConnPool::Instance()->FreeConn(sql);
这句话是多余的,因为在SqlConnRAII
析构的时候,析构函数里面会调用connpool_->FreeConn(sql_);
。如果不删去这句话,会导致数据库连接池数量增加,这句话应该删去。