新C++編このページの概要このページでは、メモリとオブジェクトに関する話題を取り上げます。用語としてのオブジェクトのことで、たとえば変数を定義したときに作られているものを指しています。オブジェクトはメモリ上に構築されますが、メモリがどのように使われているのか、またいつまでそこにあり続けるのかといったルールを知っておく必要があります。要点だけをさっと確認したい方は、「まとめ」をご覧ください。メモリモデル前のページでポーカープログラムは終わりにして、ここからは新しいテーマを設定して進めていくことにします。いざとなればメモリ上のデータを直接読み書きできるプログラミング言語です。メモリ上のどの位置に何があるか管理できているのならば、変数を使わずに直接メモリ上のデータを触ることができます。C++(やC言語)の強さでもあります。そこで、そろそろメモリを意識した話題を取り上げていこうと思います。editor)を設定します。1バイト単位で調べたいときに使われるツールです。無料で入手できるありふれたツールですが、あえて自力で作ってみることを通して、メモリに関する理解を深めていくことを狙います。プログラムが実行されるコンピュータのメモリに関して、以下の想定を立てています。呼んでいるものは、ようはメモリ領域のことです。一般的なコンピュータ用語としては、ストレージは、記憶装置の総称のことです。ストレージをメモリ領域と表記します。1ビットの大きさしかないとしても、1バイト分の場所が取られることを意味しています。ビット演算という演算や、ビットフィールドという機能を使うことで、1ビット単位でデータを取り扱う細かい処理も可能になります。ビット演算については、「ビット単位の処理」のページで解説します。1つ1つのバイトを区別できる表現があるということです。「一意である」「同じものがない」という意味です。メモリアドレスについては後で再び取り上げます。用語であって、オブジェクト指向におけるオブジェクトとは別のものです。「変数の定義によって構築されるオブジェクト」のことを単に「変数」というケースが多いです。【上級】関数はメモリに置かれますが、オブジェクトではありません2。【上級】オブジェクトを構築する手段にはほかに、new式があります。オブジェクトはメモリ上にあって(値がメモリ上に記憶されていて)、名前を付けることができ、型を持ち、寿命があります。これまでのページで何度も変数を定義してきた経験から、メモリ上にあること、名前を付けられること、型を持つことは自然に受け入れられると思います。そのオブジェクトがメモリ上に存在することが保証される期間をあらわす用語です。そのオブジェクトのためのメモリ領域が確保された時点から始まり、そのメモリ領域を使わなくなったときに終わります。【上級】明示的なコンストラクタによってオブジェクトの初期化が行われる場合は、その初期化が終わった時点からが寿命の開始になります。同様に、明示的なデストラクタがあるなら、それによる終了処理を終えた時点で寿命が終わりを迎えます。3オブジェクトは、ほかのオブジェクトを含むことがあります。構造体が分かりやすい例で、構造体型の変数を定義すれば、それ自体が1つのオブジェクトですが、その中に含まれるデータメンバもそれぞれがオブジェクトです。同様に、配列の各要素もオブジェクトです。