は、私はクラスのメンバを持っている:QSetの各(ポインタ)要素を手動で削除する必要がありますか?
QSet<QDialog*>* dialogs_;
は、私はちょうどdialogs_または私は同様にそれの各要素に対して削除呼び出す必要があります削除する必要がありますか?
は、私はクラスのメンバを持っている:QSetの各(ポインタ)要素を手動で削除する必要がありますか?
QSet<QDialog*>* dialogs_;
は、私はちょうどdialogs_または私は同様にそれの各要素に対して削除呼び出す必要があります削除する必要がありますか?
最初にセットを反復し、その中のすべてのオブジェクトを削除してから、セットオブジェクトを削除します。
しかし、Qtには独自のメモリ管理があり、そのセットを削除してQtのメカニズムによってオブジェクトが破壊されたままにしておくとよいでしょう。
私は今Qtを使っていませんが、親オブジェクトに 'QDialog'などのui要素を渡すと、そのオブジェクトは子UI要素のメモリ管理を担当するようになります。私にそれを引用しないでください。 –
@ChrisPartonしかし、あなたが子供を削除すると、qtシステムはそれを登録します。 [this](http://stackoverflow.com/questions/2491707/memory-management-in-qt)および[this](http://developer.qt.nokia.com/doc/qt-4.8/objecttrees)を参照してください。 html) –
はい、QDialog
を手動でそれぞれdialogs_
に削除する必要があります(ある場合)。
QSet
とdelete
で手動で繰り返し処理することができます。 QDialog
はQWidget
から継承されているため、別の方法では、フリーストアにも親が割り当てられている場合は、delete
すべてのダイアログの親となります。delete
です。
フリーストアにQSet
を割り当てる理由はありません。これが実行している場合です。 new
/delete
の操作は、クラスの直接のメンバーにするだけで保存できます。
QSet<QDialog*> dialogs_;
これは、w.r.tを気にする必要がないことです。手動削除。これは、トリックを行います
:
qDeleteAll(*dialogs_);
delete dialogs_
あなたは間接参照せずに、それをも行うことができます。
qDeleteAll(dialogs_->begin(), dialogs->end());
delete dialogs_
あなたは、いくつかのコンテキストを提供する必要があります。あなたのクラスが 'dialogs_'を' NULL'に初期化した後に 'no'を初期化するだけなら、何も' delete'する必要はありません。それは別のことをしますか?私たちは知らない、あなたは私たちに語っていない。 –