13

通常、オブジェクトを削除するときは、ゼロに設定します。これは、ルーチンをコーディングして、オブジェクトがゼロでないことを確認してから続行するのに役立ちます。

ただし、deleteLater()関数を使用すると、制御できなくなります。有効なアイテムなのか、新しいアイテムを作成する必要があるのか​​わかりません。私が見つけた解決策は、状態を個別に追跡することでしたが、より良い方法はありますか?

4

3 に答える 3

22

deleteLater()オブジェクトを呼び出してからポインタを に設定しても問題はありませんnullptr。Qt フレームワークはオブジェクトを安全に削除します。

別の方法として、破棄されたシグナルに接続してオブジェクトの破棄を通知し、ポインターをnullptrそのスロットに設定することもできます。

于 2011-05-23T10:46:12.853 に答える
10

削除されるオブジェクトが QObject の場合、QPointer を使用できます。これにより、NULL に設定されます。

于 2011-05-23T10:48:49.633 に答える
4

「ポインタをゼロにする」という意味ですか?C ++では、オブジェクトとオブジェクトへのポインタを区別することがJavaよりも重要です。ここでは、オブジェクトをゼロにするとそのデストラクタが機能しないため、特に重要です。オブジェクトへのポインタをゼロにしても、問題はありません。Qtが「削除するオブジェクト」リストに別のポインタを追加するからです。

于 2011-05-23T12:02:19.133 に答える