53

さらに私のコードでは、オブジェクトが null/空かどうかを確認します。

オブジェクトを null に設定する方法はありますか?

4

5 に答える 5

67

クラスのオブジェクトを NULL に設定することはできません。ただし、ポインタ (オブジェクトのメモリ アドレスを含む) を NULL に設定することはできます。

あなたが求めていることができないことの例:

Cat c;
c = NULL;//Compiling error

できることの例:

Cat c;
//Set p to hold the memory address of the object c
Cat *p = &c;
//Set p to hold NULL
p = NULL;
于 2010-06-13T02:13:29.387 に答える
5

への任意のポインターを設定できますがNULLNULLC++ では単に 0 として定義されています。

myObject *foo = NULL;

NULLまた、標準ヘッダーを含める場合は が定義されていますが、言語自体には組み込まれていないことに注意してください。が定義されていない場合NULLは、代わりに 0 を使用するか、次を含めることができます。

#ifndef NULL
#define NULL 0
#endif

余談ですが、ポインタではなくオブジェクトを に本当に設定したい場合は、 Null Object PatternNULLについて読むことができます。

于 2010-06-13T02:15:21.910 に答える
4

オブジェクトが NULL/空かどうかを確認したい。NULL であることと空であることは同じではありません。Justin と Brian が既に述べたように、C++ では NULL は通常ポインターに関連付ける代入です。おそらく operator= をオーバーロードできますが、実際にこれを行う場合はよく考えてください。他のいくつかのこと:

  1. C++ では、NULL ポインターは「空の」オブジェクトを指すポインターとは大きく異なります。
  2. bool IsEmpty()オブジェクトの変数がデフォルトの状態にリセットされた場合に true を返すメソッドを用意しないのはなぜですか? NULL の使用をバイパスする可能性があると思います。
  3. A* p = new A; ... p = NULL;コードがガベージコレクションされることを保証できない限り、次のようなものを持つことは悪いことです (no delete p)。どちらかといえば、これはメモリリークにつながり、そのようなリークがいくつかあると、コードが遅くなる可能性が高くなります.
  4. class Null {}; Null _NULL;これを行ってから、状況に応じて他のクラスの operator= および operator!= をオーバーロードすることをお勧めします。

おそらく、オプション 4 をより適切に使用できるように、コンテキストに関する詳細を投稿する必要があります。

アルパン

于 2010-06-13T03:27:04.693 に答える