Cpp クラス デストラクタ 新しいページはコチラ
提供: yonewiki
(→クラス デストラクタ) |
(→クラス デストラクタ) |
||
28行: | 28行: | ||
− | + | 上記のような操作を行った結果、0x0000ffa0からの1byteがpcAが指し示すchar型の変数として、ただの枠だった、役立たずが、実体化をへて、実態を作りました。このようにして実体化されたものをまさに<span style = "background:linear-gradient(transparent 50%, #ff7f7f 50%); font-weight:bold; ">実体</span>とか<span style = "background:linear-gradient(transparent 50%, #ff7f7f 50%); font-weight:bold; ">Instance<span>(</span>インスタンス<span>)</span></span>と呼んでいます。インスタンスという聞きなれないかもしれないカタカナ言葉はこの先、かなり使う専門用語になります。プログラミングを続けるなら、この解説の文を読むなら覚えておくべきだと思います。 | |
+ | |||
+ | |||
+ | このようなインスタンスに対して*pcA = 'A';のようにすると'A'のASCIIコード、SJIS、Unicode体系のUTF-8方式も同じですが、'A'のコード値の0x41が格納されます。リトルエンディアンなので、先頭から、0x1(b0001)、0x4(b0010)が格納されます。bから始まる数字は2進数0xは16進数で表現しています。リトルエンディアンなので2進数ビットも反転しますから、先頭から1000 0100と8bitが格納されます。 | ||
+ | |||
+ | |||
+ | 大事なのはここからです。 | ||
+ | |||
+ | |||
+ | このようにして実体化したインスタンスは最初からchar cA_test;という宣言をして実体化したオブジェクトと違って、プログラム動作中にメモリを確保するということをやっています。配列のようなものもプログラム実行時に配列の大きさを決めるようなことが出来ます。これを<span style = "background:linear-gradient(transparent 50%, #ff7f7f 50%); font-weight:bold; ">動的なメモリ確保</span>と呼んでいます。 | ||
+ | |||
+ | |||
+ | 動的なメモリ確保した場合は、そのままプログラムが異常終了したら、確保しっ放しでプログラムがほったらかし状態にして、他のプログラムも使えない領域として、どのプログラムからも手を付けることができな状態になってしまいます。これを<span style = "background:linear-gradient(transparent 50%, #ff7f7f 50%); font-weight:bold; ">メモリリーク</span>と呼んでいます。PCを再起動するまではメモリがスッキリしないことになります。メモリは揮発性のものが現在は主流なので、一度PCの電源を落とせば、きれいさっぱり、解放されます。 | ||
+ | |||
+ | |||
+ | とはいいつつも気づきようが無いことがほとんどなので、どんどんPC使用可能メモリが減っていき、PC動作が不安定になっていきますので、こうったことは起こさないことが大事です。 | ||
+ | |||
+ | |||
+ | そこでメモリを解放するにはdelete pcA のようにして、ポインタ変数を役立たずの状態にするということが大事になります。 | ||
+ | |||
+ | |||
+ | こういった変数を使い終わったらdeleteするということをするための、後処理専門関数がデストラクタです。 | ||
+ | |||
+ | <syntaxhighlight2 lang="cpp" line> | ||
+ | class Ctest{ | ||
+ | private: int* piValue; | ||
+ | private; int iArraySize; | ||
+ | void Ctest::Ctest(int iArraySize); | ||
+ | void Ctest::~Ctest(); | ||
+ | } | ||
+ | </syntaxhighlight2> | ||
+ | |||
+ | <syntaxhighlight2 lang="cpp" line> | ||
+ | #include "test.h"; | ||
+ | void Ctest::Ctest(int iArraySize){ | ||
+ | piValue = New int[iArraySize]; | ||
+ | } | ||
+ | void Ctest::~Ctest(){ | ||
+ | Delete piValue; | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </syntaxhighlight2> | ||
+ | |||
+ | <syntaxhighlight2 lang="cpp" line> | ||
+ | int main(){ | ||
+ | Ctest *pCtest; | ||
+ | pCtest = New Ctest(10); | ||
+ | |||
+ | ////////// | ||
+ | //中略 | ||
+ | ////////// | ||
+ | |||
+ | Delete pCtest; | ||
+ | |||
+ | return True; | ||
+ | } | ||
+ | </syntaxhighlight2> | ||
+ | |||
+ | |||
+ | |||
[[C PlusPlus#C++からの技術|C++]]に戻る | [[C PlusPlus#C++からの技術|C++]]に戻る |