Cpp クラス デストラクタ 新しいページはコチラ

提供: yonewiki
移動: 案内, 検索
(クラス デストラクタ)
(クラス デストラクタ)
16行: 16行:
 
[[ファイル:0000 Destructor Image1.jpg|800px|thumb|none|DestructorImage1]]
 
[[ファイル:0000 Destructor Image1.jpg|800px|thumb|none|DestructorImage1]]
  
 上記のようになっています。
+
 上記のようになっていて、
 +
 
 +
 
 +
 ポインタ変数を定義した時点、図の★の部分では、char* pcA;となっていて、図では、何もないchar型の大きさを知る穴あきの枠組プレートみたいなものが準備されます。この時点ではメモリ空間のポインタ変数がさすためのアドレス格納の旗みたいなものがあって、そこに32bitのメモリアドレスを保持できるのですが、最初は何も入ってい状態になります。旗があって枠がある。そんなイメージですね。図の中では間違えて16bitアドレスの場合と書いてますが、32byteが正しいです。そうするとアドレス範囲は0x00000000~0xffffffffで、この範囲の値が入る予定です。このアドレスを格納するアドレスだけは宣言した時点で決まります。それが図の例だと0x000100a0だとしています。これは &pcAとして取得できるモノです。実際には取得することはしないはずです。ポインタ変数にアドレス演算子を接頭句につけて使うことは、まずないでしょう。総じていうと、この時点でのpcAという変数は役立たずといってよいでしょう。変数を入れる領域についてのうつわ、箱、受け皿、そういったものすら用意できていないのです。変数を使うための準備はしたっていう感じです。指し示すことができるのは1byteの領域で基本charという型を指すことができて、そのアドレスを受け入れる器だけは準備した状態です。中身はまだない。吾輩は猫である名前はまだない。そんな感じです。
 +
 
 +
 
 +
 ここまで、ポインタ変数を定義したときの動作を説明しましたが、通常、この次に起こることは既存のchar変数にポインタを合わせるchar cA_test;→pcA = &cA_test;という処理、あるいはnew演算子を使うことでしょう。
 +
 
 +
 
 +
 New演算子を使った場合は図のとおり、pcA = new char; と記述する処理を行います。これが、上向き矢印のところに書いた通り<span style = "background:linear-gradient(transparent 50%, #ff7f7f 50%); font-weight:bold; ">実体化</span>というモノにあたります。そうすると、またたくまに実際のメモリ空間に作用する処理が行われ、図の例の場合は1byte<span>(</span>8bit<span>)</span>のメモリ領域を確保し、確保した場所のアドレス0x0000ffa0がpcAに格納されます。図で言うと旗の部分です。旗の部分は実際のメモリ空間を使っていますから、どこか遠くのメモリ空間の先頭、この図の例では0x000100a0を先頭にここから32byteのところまでを使って、今回使うchar型アドレス pcA の0x0000ffa0が格納されます。メモリ空間の大きい値のところから手前に向かって32bitの値が格納される方式をWindowsでは扱っているため、図のようにひっくり返ったような感じで設定されます。これを<span style = "background:linear-gradient(transparent 50%, #ff7f7f 50%); font-weight:bold; ">リトルエンディアン方式</span>と言います。
 +
 
 +
 
 +
 上記のような操作を行った結果、0x0000ffa0からの1byteがpcAが指し示すchar型の変数として、ただの枠だった、役立たずが、実体化をへて、実態を作りました。このようにして実体化されたものをまさに実体とか<span style = "background:linear-gradient(transparent 50%, #ff7f7f 50%); font-weight:bold; ">Instance<span>(</span>インスタンス<span>)</span></span>と呼んでいます。インスタンスという聞きなれないかもしれないカタカナ言葉はこの先、かなり使う専門用語になります。プログラミングを続けるなら、この解説の文を読むなら覚えておくべきだと思います。
  
 
[[C PlusPlus#C++からの技術|C++]]に戻る
 
[[C PlusPlus#C++からの技術|C++]]に戻る

2020年7月9日 (木) 00:00時点における版



個人用ツール
名前空間

変種
操作
案内
ツールボックス