我有一个 QVector
对于一个结构体,结构体包含许多属性,有些是 int,有些是指向类的指针。和每个 TheCore
将绑定(bind)到 QTabWidget
中的选项卡.
struct TheCore {
int score;
ClassA *classA;
ClassB *classB;
}
QVector<TheCore> m_coresVector;
在我的源文件中,我有一个创建新 TheCore 并添加到 coresVector 的函数。此外,其中一个类将在创建时分配给 QTabWidget。// create tab function
TheCore core;
core.score = 50;
core.classA = new ClassA();
core.classB = new ClassB();
ui->tabWidget->addTab(core.classA, "tab_1");
m_coresVector.append(core);
然后tab关闭会触发destruct函数currentTabIndex = ui->tabWidget->currentIndex();
ui->tabWidget->removeTab(currentTabIndex)
delete m_coresVector[currentTabIndex].classA;
delete m_coresVector[currentTabIndex].classB;
m_coresVector.remove(currentTabIndex);
但是我遇到了内存泄漏。我开始了很多选项卡,然后关闭它们,内存使用量不断增加而没有下降。如何正确删除这些指针类?
最佳答案
你有选择。
std::shared_ptr
或 std::unique_ptr
供您指点另外,我建议您对其进行更多封装,将这些指针隐藏在私有(private)部分中,以防止从意外方面更改它们并提供一些接口(interface),但这可能取决于。
你也可以尝试重构你的代码,所以你的
ClassA
和 ClassB
将接受构造函数QObject* parent
就像 Qt 类(class)经常做的那样。因此,当父级销毁时,它们将被销毁。实际上,您的“remove-tab”处理代码看起来不错,似乎没有任何内存泄漏或您的代码示例不完整。您可以在
classA
的构造函数和析构函数中添加计数器, classB
以确保创建和删除它的次数。可能,泄漏在另一个地方。
关于c++ - 如何正确破坏包含指针类的结构的 QVector?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63326712/