1

有一些问题让我感到困惑:1。

QLabel *label = new QLabel(this);
//or
QLabel *label = new QLabel;
//if I forgot to set label as a child of other widget, it causing a memory leak?

2.

QList<MyClass> myList;
MyClass *my = new MyClass;
myList.append(*my);
//is necessary?
delete my;

那么,我应该如何处理 qt 呢?所有类都继承自 QObject 还是在新建后手动删除?还是使用 Qt 智能指针?请帮助我,非常感谢你...

4

1 回答 1

1

在 C++ 中如何分配对象取决于预期的生命周期,而 Qt 不会改变这一点。所以,是的,在情况 1 中,第二个标签被泄露,因为它的生命周期与this.

在 csae 2 中,您使用了不必要的堆分配。写吧

{
  QList<MyClass> myList;
  MyClass my; // Local scope
  myList.append(my);
}

或者更简洁:

{
  QList<MyClass> myList;
  myList.append( MyClass() ); // Unnamed object, can be moved into myList.
}
于 2012-09-21T07:45:29.183 回答