读书人

怎么使用指针函数返回的对象

发布时间: 2013-10-31 12:03:52 作者: rapoo

如何使用指针函数返回的对象
先给一个简单的数据库链接代码,调试通过可以看到数据结果,给这个是为了避免有人以为我数据库配错了或者其他代码错了。


QSqlDatabase MainWindow:: iniDBConnect(QString Server, QString UserName, QString Password, QString Database)
{

QSqlDatabase db =QSqlDatabase::addDatabase("QMYSQL");
db.setHostName(Server);
db.setUserName(UserName);
db.setPassword(Password);
db.setDatabaseName(Database);
return db;
}

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
QSqlDatabase db = iniDBConnect(QString("localhost"),QString("gxx"),QString(""),QString("information_schema"));
bool bOpen = db.open();
//... 以下查询数据部分省略,结果界面上view内能看到数据。
}


好了我现在想把 iniDBConnect函数返回改成指针,现在代码改成以下格式,编译通过,运行到数据库open时liunx报系统底层错误,我想用qt的内存查看器查一下但是不会用,我不知道是为什么。请问哪位高手知道

QSqlDatabase * MainWindow:: iniDBConnect(QString Server, QString UserName, QString Password, QString Database)
{

QSqlDatabase db =QSqlDatabase::addDatabase("QMYSQL");
db.setHostName(Server);
db.setUserName(UserName);
db.setPassword(Password);
db.setDatabaseName(Database);
return &db;
}

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
try
{
QSqlDatabase * db = iniDBConnect(QString("localhost"),QString("gxx"),QString(""),QString("information_schema"));
bool bOpen = (*db).open(); //编译通过,执行这句代码时报liunx底层错误


如果有人能准确回答我会增加到100分的,虽然我觉得能真正回答这道题目的人应该不会在呼100分吧,先在此谢过。
[解决办法]
QSqlDatabase * MainWindow:: iniDBConnect(QString Server, QString UserName, QString Password, QString Database)
{

QSqlDatabase db =QSqlDatabase::addDatabase("QMYSQL"); // 此处db为局部变量,函数出栈后自动析构
db.setHostName(Server);
db.setUserName(UserName);
db.setPassword(Password);
db.setDatabaseName(Database);
return &db; // 返回一个地址,返回后地址无效
}
[解决办法]
没明白你为啥非用返回指针,好了,你返回指针出可以,但不能返回&db这种方式,因为返回前db已经析构了。

 

QSqlDatabase * MainWindow:: iniDBConnect(QString Server, QString UserName, QString Password, QString Database)
{

QSqlDatabase db =QSqlDatabase::addDatabase("QMYSQL");
db.setHostName(Server);
db.setUserName(UserName);
db.setPassword(Password);
db.setDatabaseName(Database);

return new QSqlDatabase(db);
}






[解决办法]
QSqlDatabase * MainWindow:: iniDBConnect(QString Server, QString UserName, QString Password, QString Database)
{

QSqlDatabase* db = new QSqlDatabase::addDatabase("QMYSQL"); // 在堆上建立
db.setHostName(Server);
db.setUserName(UserName);
db.setPassword(Password);
db.setDatabaseName(Database);
return db; // 返回一个地址,返回后地址依然有效,不过注意 手动 释放 db
}

读书人网 >QT开发

热点推荐