6

オブジェクトを一意に識別するために、オブジェクトへの実際のポインター アドレス (揮発性とマークされていない) を使用したいと考えています。

これは悪いことですか?一般に、システムメモリ管理はオブジェクトを移動するので、そのアドレスは安定していますか?

ありがとう

4

5 に答える 5

10

ポインターは、何かを壊さない限り、それが指しているオブジェクトの存続期間中、安定したままであることが保証されています。OS は確かにメモリ内で物事を移動しますが、それは物理メモリです。OS がプロセスに提示する仮想メモリ空​​間は、物事を同じアドレスに保持します。

于 2012-04-07T02:38:34.773 に答える
4

C では、オブジェクトのアドレスはその存続期間中一定です。reallocC 標準では、オブジェクトを「移動」しないことに注意してください。同じ内容 (古い長さと新しい長さの短い方) を持つ新しいオブジェクトを割り当て、成功した場合は古いオブジェクトを解放します。

于 2012-04-07T02:50:38.347 に答える
4

ポインターは安定していますが、ポインターを正しく使用する必要があります。そうしないと、コードが不安定になります。

ポインタは、オブジェクトが死ぬ瞬間まで有効です。オブジェクトが死ぬと、ダングリング ポインタと呼ばれるものができます。

ダングリング ポインターを回避する方法は多数ありますが、そのうちのいくつかは非常に高度なトピックです。たとえば、「ハンドル」を使用することもできますが、それはより洗練されたアプローチであり、デフォルトとは異なるメモリ管理が必要になります。

使用している言語も、ポインターを無効にする方法に影響します。C、C++、および Objective-C としてタグ付けされた質問があります。C では、malloc と realloc によってポインターを無効にすることができます。C++ では、ポインターを削除によって無効にすることができます。

この記事など、初めて紹介される場合は、ポインタについてもっと読むことを強くお勧めします。

また、 std::shared_ptrをさらに読むことをお勧めします。

于 2012-04-07T02:58:34.947 に答える
3

オブジェクトへのポインターは、オブジェクトが死ぬまで有効です (安定)。

識別にポインターを使用することには用途がありますが、最善の方法ではない場合があります。

于 2012-04-07T02:38:18.360 に答える
3

iOS メモリ管理は、オブジェクトを移動しません。オブジェクトへのポインターがある場合、それはオブジェクトの存続期間中有効です。

あなたの質問では、「ポインターアドレス」を参照しています。ただし、オブジェクトへのポインターを意味していると思います。そうしないと、この質問に対する答えがより複雑になります。

于 2012-04-07T02:40:44.117 に答える