欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

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

更新时间: 2014-01-05 02:44:21 责任编辑: Author_N1

 

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


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 
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:44:21
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/13788/
本文WWW.DOC100.NET DOC100.NET版权所有。