36

私は C++ を学んでおり、C++ Primer を読んでいます。答えを知りたい質問があります:

ポインタpが与えられた場合、 pが有効なオブジェクトを指しているかどうかを判断できますか? もしそうなら、どのように?そうでない場合、なぜですか?

4

6 に答える 6

48

いいえ、できません。なんで?有効なポインターを構成するものとそうでないものに関するメタデータを維持するのは費用がかかるため、C++ では、不要なものにお金を払う必要はありません。

また、ポインターが有効かどうかを確認する必要はありません。これは、ポインターがどこから来るかを知っているためです。これは制御するコードのプライベートな部分であるか、外部向けのコントラクトで指定したためです。

于 2013-06-19T22:45:43.590 に答える
16

ありえない。このシナリオを考えてみてください。

int *ptr = new int(10);
int *ptrDup = ptr;

delete ptr;

しかし、存在しなくなっptrDupたメモリの場所をまだ指しています。ptrしたがって、逆参照ptrDupは未定義の動作をもたらします。しかし、まったく異なる概念である参照カウントがあります。

于 2013-06-19T22:45:06.623 に答える
4

ポインターが に設定されている場合、nullptrそれは指すオブジェクトが与えられておらず、代わりに「デフォルト」値が与えられていることを意味します。ポインターを有効なオブジェクトに割り当てることができnullptr 同時に有効なオブジェクトに割り当てられない可能性もありますが、その場合、それを判断することは不可能です。例えば:

nullptr:

int *ptr = nullptr;

// check if pointer is unassigned to an object
if (ptr == nullptr) ptr = new int{0};

なしnullptr:

int *ptr;

// using ptr while uninitialized is Undefined Behavior!
if (ptr != &some_object)
于 2013-06-19T22:47:56.077 に答える