【发布时间】:2014-05-04 13:45:51
【问题描述】:
我尝试通过学习开源来学习更多关于编程的知识 UML。我发现的代码处于 Qt 3 和 Qt 4 之间的阶段。 该项目不是那么活跃,所以我在这里问这个问题。也许 我应该补充一点,使用此代码的程序确实可以运行。
注意,我是小学生。我问是因为我想学习。
我的问题很简单:
这段代码会泄漏内存吗?
如果不是,为什么?
void warn(const QString & s) {
// not showed dialog to compute needed size
QDialog d_aux;
Q3VBoxLayout * vbox_aux = new Q3VBoxLayout(&d_aux);
vbox_aux->setMargin(5);
Q3TextEdit * e = new Q3TextEdit(&d_aux);
e->setText(s);
// showed dialog
QDialog * d = new QDialog;
d->setCaption("My caption");
Q3VBoxLayout * vbox = new Q3VBoxLayout(d);
vbox->setMargin(5);
Q3TextView * t = new Q3TextView(d);
QFontMetrics fm(QApplication::font());
int maxw = (MyWindow::get_workspace()->width() * 4) / 5;
int maxh = (MyWindow::get_workspace()->height() * 4) / 5;
int he = (e->lines() + 5) * fm.height();
t->setText(s);
t->setMinimumSize(maxw, (he > maxh) ? maxh : he);
vbox->addWidget(t);
d->show();
}
谢谢 // JG
【问题讨论】:
-
看起来确实如此。有 5 个
new表达式,而不是一个delete。分配的内存可能会在其他地方被释放,但从显示的代码来看,在哪里(如果有的话)并不明显。 -
@jrok:然后又是 Qt,一切都隐含地占据了整个地方的所有权。我愿意为 Qt++11 付费...
-
@Kerrek。确实。在 Qt 文档中几秒钟后,
QDialog d_aux似乎是vbox_aux的父级,它稍后会处理它。但是d看起来确实像泄漏了(带上t和vbox)。 -
感谢您的快速回答我是 Qt 新手,我怀疑 Qt 在幕后做了一些神奇/可疑的事情。但是,我几乎可以肯定这段代码正在泄漏。现在我知道。我将在我的 UML 图中将此代码标记为泄漏并继续。换句话说,为未来的研究提供了一个金块。谢谢!!
-
@KerrekSB:Qt++11 已经存在很久了。 ;)
标签: c++ qt memory-leaks qtgui qdialog