web-dev-qa-db-ja.com

クラスの1つが削除されると、Qtのシグナルは自動的に切断されますか

Qtは、サイドの1つが削除されると、オブジェクト間の接続を自動的に削除しますか?

例:connect (A .. , B ..)、A(ポインタ)が削除された場合、またはBが削除された場合、接続は切断されますか?

デストラクタで明示的に切断を使用する必要がありますか?

45
daisy

はい、 _QObject::~QObject_ デストラクタが処理します。

オブジェクトとの間のすべての信号は自動的に切断され、オブジェクトの保留中のポストされたイベントはイベントキューから削除されます。
ただし、QObjectサブクラスを直接削除するよりも、 deleteLater() を使用する方が安全な場合がよくあります。

ただし、注意してください。

警告:保留中のイベントが配信されるのを待っている間にQObjectを削除すると、クラッシュする可能性があります。 QObjectが現在実行中のスレッドとは別のスレッドに存在する場合は、直接削除しないでください。代わりにdeleteLater()を使用してください。これにより、保留中のすべてのイベントがオブジェクトに配信された後で、イベントループがオブジェクトを削除します。

43
Mat