为什么下面的代码打印的是 true 而不是 false?
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
if (!openDatabase()) return 1;
// false means don't open closed connections.
QSqlDatabase db2 = QSqlDatabase::database("foo", false);
qDebug() << db2.isOpen();
return 0;
}
bool openDatabase()
{
QSqlDatabase db1 = QSqlDatabase::addDatabase("QPSQL", "foo");
db1.setHostName("localhost");
db1.setUserName("user");
db1.setPassword("password");
db1.setDatabaseName("bar");
return db1.open();
}
根据QSqlDatabase 和 QSqlQuery 的正确方法是什么的第一个答案中的示例 #2?,当QSqlDatabase
对象超出范围时,数据库连接将关闭。因此,当db1
结束时超出范围时openDatabase()
,应该关闭连接。
(实际发生的情况有点微妙。在内部,QSqlDatabase
维护QSqlDatabase
它为特定连接返回的对象的引用计数。引用计数递减~QSqlDatabase
,当它达到 0 时,连接关闭。但是,这不应该改变任何东西。引用计数应该在第一行之后为 1,openDatabase()
在函数结束并且 db1 被销毁后为 0。)
我错过了什么?