定義されたすべてのオブジェクトはメモリに存在し、アドレスを持っています。オブジェクトのアドレスは、オブジェクトが存在し始める場所からのメモリの場所です。したがって、1次元のメモリ空間では、オブジェクトがスロット100に存在し始めると、100がオブジェクトのアドレスであると言われます。
99 100 101 102 103 104 105 106
=====================================
| O | B | J | E | C | T |
=====================================
^
|
|
pnObject
ポインタは、他のオブジェクトのアドレスを含むオブジェクトです。オブジェクトを動的に作成すると、そのオブジェクトはヒープメモリに作成され、スコープはありません。割り当てられたメモリを明示的に削除しない限り、またはメモリを割り当てているプログラムが停止する限り、存在し続けます。
メモリは、c-library関数malloc
またはc++
演算子を介して動的に割り当てられます。演算子new
は、オブジェクトが存在し始めるヒープメモリ内の開始位置であるアドレスを返します。アドレスを変数(ポインタと呼ばれる特定のタイプ)に保存することになっています。この変数は、オブジェクトのアドレスを保持します。
Object *pnValue = new Object();
ヒープ内に新しく作成されたオブジェクトのアドレスを知っている限り、制御できますが、ポインター変数を破棄するか、コンテンツをオーバーレイするか、単にアドレスを保存しないなどしてアドレスを忘れると、その場所にアクセスして先に進むことはできません。割り当てられたメモリを解放/削除できません。
99 100 101 102 103 104 105 106
=====================================
| O | B | J | E | C | T |
=====================================