12

Qt オブジェクトの寿命は?

そのような:

QTcpSocket *socket=new QTcpSocket();

ソケットはいつ破棄されますか? 使うべきか

delete socket;

違いはありますか:

QTcpSocket socket;

これについての深い情報は見つかりませんでした。コメントやリンクは大歓迎です。

4

3 に答える 3

13

Qt は親子関係を使用してメモリを管理します。QTcpSocket作成時にオブジェクトに親を指定すると、親がオブジェクトのクリーンアップを処理します。親は、たとえば、ソケットを使用する GUI ウィンドウにすることができます。ウィンドウが終了すると (つまり、閉じられると)、ソケットは終了します。

親なしで行うことはできますが、実際にdeleteはオブジェクトを手動で作成する必要があります。

個人的には、慣用的な Qt に固執し、すべてのオブジェクトを親子ツリーにリンクすることをお勧めします。

于 2010-07-16T11:41:31.917 に答える
11

で割り当てられたオブジェクトは、newで解放する必要がありますdelete

ただし、Qt では、ほとんどのオブジェクトは、コンストラクターへの引数として指定する親を持つことができます。親が削除されると、子オブジェクトは自動的に削除されます。

于 2010-07-16T11:41:19.177 に答える
3

何らかの理由で親を渡したくない場合 (ソケット オブジェクトを所有する意味のある QObject がないため)、QSharedPointer を使用して有効期間を管理することもできます。

于 2010-07-16T12:15:16.087 に答える