プログラミングでは、「this」ポインターはメンバー関数内の現在のオブジェクト インスタンスを参照します。これにより、関数がオブジェクトのデータとメソッドにアクセスできるようになります。ただし、次のような疑問が生じます。「this」が null かどうかを確認することは意味があるのでしょうか?
クラス内でタスクを実行するメソッドを考えてみましょう。
class MyClass {
public:
int myFunction() {
if (this == nullptr) {
return -1; // Error code
}
...
}
};
問題は、この null チェックが必要なのか、それとも有効なのかということです。
C 標準によれば、null ポインタの呼び出しはすべて未定義の動作です。これは、「this」ポインタが null の場合、メソッド呼び出しは無効であり、プログラムの動作は予測できないことを意味します。したがって、標準 C では、 "this" が null かどうかをチェックすることは賢明ではありません。
ただし、一部の実装では、非仮想関数に "this == 0" を使用できます。その結果、これらの実装用に特別に作成されたライブラリは、このハックに依存する可能性があります。
場合によっては、デバッグ支援として null チェックを追加して、次のような理由で「this」ポインタが予期せず null になっているインスタンスをキャッチできます。電話をかけた人の間違い。ただし、このような問題をデバッグするための推奨される方法は、asserts.
を使用することです。さらに、「this」が null かどうかをチェックしても、必ずしもオブジェクトが削除されることを意味するわけではないことに注意することが重要です。これは、メソッド呼び出しが null ポインター、または null ポインターから取得された参照に対して行われたことを示すだけであり、これは C では本質的に正しくない動作です。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3