如何访问类构造函数中创建的对象

How to access object created in class constructor

本文关键字:构造函数 创建 对象 何访问 访问      更新时间:2023-10-16

构造函数中的GUI类正在创建我的数据库类的新对象。看起来这样:

GUI::GUI(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
    Baza *plik = new Baza();
    connect(ui.insertBtn, &QPushButton::clicked, this, &GUI::run);
}

我设法从qdialog获取用户输入:

void GUI::run() {
    DialogInput dialog;
    dialog.exec();
    site_text = dialog.getSite();
}

我应该如何将site_text传递到Baza类中的功能?我需要使用GUI构造函数中创建的该对象(PLIK),但我无法从GUI::run()函数访问它。

plik添加到 GUI的声明中:

class GUI : public QWidget {
    // ...
    Baza* plik;
};

然后在构造函数

GUI::GUI(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
    plik = new Baza();
    connect(ui.insertBtn, &QPushButton::clicked, this, &GUI::run);
}

当您的代码站立时,plik在GUI构造函数完成后立即泄漏。

在破坏者中清理plik

GUI::~GUI()
{
    // ...
    delete plik;
}

另外,使用std::unique_ptrplik存储在GUI中,因此您不需要记住会破坏它。或者,如果plik受益于从QObject派生(例如,用于信号和插槽),则可以将其父母与GUI一起,而QT将处理破坏。在这两种情况下,此建议都假设plik的寿命与GUI相同。

当您在构造函数内部创建指针时,对象的范围是直到构造函数的末端。

您需要创建一个为GUI类创建一个全局私人变量,以便同一类中的所有方法访问该变量。Baza * pLink;

当您在构造函数中创建指针时,请不要忘记在破坏中删除相同的指针。

class GUI : public QWidget{
   //...
   GUI();
   ~GUI();
private:
   Baza * pLink;
}
GUI::GUI(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
    pLink = new Baza();
    connect(ui.insertBtn, &QPushButton::clicked, this, &GUI::run);
}
GUI::~GUI()
{
    delete pLink;
}
void GUI::run() {
    DialogInput dialog;
    dialog.exec();
    site_text = dialog.getSite();
    /* use the pointer to call the method to pass site_text */
    pLink->SomeMethod(site_text);
}

命名约定将在您声明该功能的本地变量和类的全局变量时起着重要作用。因此,请使用pLink或考虑使用m_pLink,其中m_将添加到所有全局变量,而p用于指针类型。