如何访问类构造函数中创建的对象
How to access object created in class constructor
构造函数中的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_ptr
将plik
存储在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
用于指针类型。
相关文章:
- 通过构造函数创建的所有对象都具有相同的向量
- 通过构造函数创建一些值并尝试添加到文档中使用 rapidjson 不起作用
- 通过零参数构造函数创建的 glm::mat4 应该包含哪些值?
- std::map<int, A> 运算符 [] 需要使用空构造函数创建 A
- 稍后使用<Class>调用类构造函数创建 std::vector
- 通过类构造函数创建线程
- 尝试使用构造函数创建对象时出错
- 运算符 = 不匹配,构造函数创建一个指针
- C++ - 类构造函数创建对象,但构造的结果不同
- 我可以为带有参数的构造函数创建类工厂
- 我们可以说构造函数创建对象
- 如何使用在另一个类的构造函数中的堆栈上接受参数的构造函数创建对象
- 构造函数创建const对象
- 使用基构造函数创建派生对象
- 使用函数中的复制构造函数创建实例的副本,该函数获取作为基对象传递的实例
- 在从基类构造函数创建的单独线程中调用纯虚函数
- 递增由向 boost::p ython 公开的构造函数创建的对象的引用计数
- 通过使用不同的构造函数创建类的实例
- 通过使用不同的构造函数创建对象,并最终释放对象的内存
- 如何使用重载构造函数创建两个动态对象