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 では、2 番目のラベルの有効期間が に関連付けられていないため、リークされ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 に答える