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

提供: yonewiki
移動: 案内, 検索
(5行目)
 
5行: 5行:
 
<tr>
 
<tr>
 
<td style="width:1px;"></td>
 
<td style="width:1px;"></td>
<td class="mbox-text plainlist" style="">本来の表記は「<b><span id="RealTitle" style="font-size:large;">C++ クラス デストラクタ</span></b>」です。この記事に付けられた題名は{{記事名の制約}}から不正確なものとなっています。</td>
+
<td class="mbox-text plainlist" style="">本来の表記は「<b><span id="RealTitle" style="font-size:large;">C++(Cpp) クラス デストラクタ</span></b>」です。この記事に付けられた題名は{{記事名の制約}}から不正確なものとなっています。</td>
 
</tr>
 
</tr>
 
</table>
 
</table>
19行: 19行:
  
  
 ポインタ変数を定義した時点、図の★の部分では、char* pcA;となっていて、図では、何もないchar型の大きさを知る穴あきの枠組プレートみたいなものが準備されます。この時点ではメモリ空間のポインタ変数がさすためのアドレス格納の旗みたいなものがあって、そこに32bitのメモリアドレスを保持できるのですが、最初は何も入ってい状態になります。旗があって枠がある。そんなイメージですね。図の中では間違えて16bitアドレスの場合と書いてますが、32bitが正しいです。そうするとアドレス範囲は0x00000000~0xffffffffで、この範囲の値が入る予定です。このアドレスを格納するアドレスだけは宣言した時点で決まります。それが図の例だと0x000100a0だとしています。これは &pcAとして取得できるモノです。実際には取得することはしないはずです。ポインタ変数にアドレス演算子を接頭句につけて使うことは、まずないでしょう。総じていうと、この時点でのpcAという変数は役立たずといってよいでしょう。変数を入れる領域についてのうつわ、箱、受け皿、そういったものすら用意できていないのです。変数を使うための準備はしたっていう感じです。指し示すことができるのは1byteの領域で基本charという型を指すことができて、そのアドレスを受け入れる器だけは準備した状態です。中身はまだない。吾輩は猫である名前はまだない。そんな感じです。
+
 ポインタ変数を定義した時点、図の★の部分では、char* pcA;となっていて、図では、何もないchar型の大きさを知る穴あきの枠組プレートみたいなものが準備されます。この時点ではメモリ空間のポインタ変数がさすためのアドレス格納の旗みたいなものがあって、そこに32bitのメモリアドレスを保持できるのですが、最初は何も入っていない状態になります。旗があって枠がある。そんなイメージですね。図の中では間違えて16bitアドレスの場合と書いてますが、32bitが正しいです。そうするとアドレス範囲は0x00000000~0xffffffffで、この範囲の値が入る予定です。このアドレスを格納するアドレスだけは宣言した時点で決まります。それが図の例だと0x000100a0だとしています。これは &pcAとして取得できるモノです。実際には取得することはしないはずです。ポインタ変数にアドレス演算子を接頭句につけて使うことは、まずないでしょう。総じていうと、この時点でのpcAという変数は役立たずといってよいでしょう。変数を入れる領域についてのうつわ、箱、受け皿、そういったものすら用意できていないのです。変数を使うための準備はしたっていう感じです。指し示すことができるのは1byteの領域で基本charという型を指すことができて、そのアドレスを受け入れる枠だけは準備した状態です。中身はまだない。吾輩は猫である名前はまだない。そんな感じです。この状態のポインタ変数はヌルポインタと呼ばれます。
  
  
31行: 31行:
  
  
 このようなインスタンスに対して*pcA = 'A';のようにすると'A'のASCIIコード、SJIS、Unicode体系のUTF-8方式も同じですが、'A'のコード値の0x41が格納されます。リトルエンディアンなので、先頭から、0x1(b0001)、0x4(b0010)が格納されます。bから始まる数字は2進数0xは16進数で表現しています。リトルエンディアンなので2進数ビットも反転しますから、先頭から1000 0100と8bitが格納されます。
+
 ちなみにnewで実体化しようとして、メモリが足りないとかの理由で、何も指し示さない状態で、ポインタ変数の中身を参照しようとすると、エラーになります。ヌルポインタによるエラー(例外)が発生したと表現でき、専門用語で、ヌルポインターエクセプションと言います。エクセプションはexceptionという英語で日本語の意味としては例外という意味が有ります。こういった例外が発生しそうな処理に対して工夫をするのが例外処理というものですが、例外が発生しそうな時に行う処理の説明をすると長くなるので、別の記事で例外処理という項目を作る予定なので、そこでまた説明することにしましょう。
 +
 
 +
 
 +
 話を戻すとして、このようなインスタンスに対して*pcA = 'A';のようにすると'A'のASCIIコード、SJIS、Unicode体系のUTF-8方式も同じですが、'A'のコード値の0x41が格納されます。リトルエンディアンなので、先頭から、0x1(b0001)、0x4(b0010)が格納されます。bから始まる数字は2進数0xは16進数で表現しています。リトルエンディアンなので2進数ビットも反転しますから、先頭から<span class="disable-auto-tel">1000 0100</span> と8bitが格納されます。
  
  
53行: 56行:
 
<span style="color: #ffffff; background-color: #555555; padding: 0px 5px 0px 5px; display: inline-block;">cpp <span>(</span>Ctest.h<span>)</span></span><!-- padding 上 右 下 左-->  
 
<span style="color: #ffffff; background-color: #555555; padding: 0px 5px 0px 5px; display: inline-block;">cpp <span>(</span>Ctest.h<span>)</span></span><!-- padding 上 右 下 左-->  
 
<syntaxhighlight2 lang="cpp" line>
 
<syntaxhighlight2 lang="cpp" line>
 +
#ifndef  __CTEST_H_YONET__
 +
#define __CTEST_H_YONET__
 
class Ctest{
 
class Ctest{
 
     private: int* piValue;
 
     private: int* piValue;
 
     private: int iArraySize;
 
     private: int iArraySize;
     public void Ctest::Ctest(int iArraySize);
+
     Ctest(int iArraySize);
     public void Ctest::~Ctest();
+
     ~Ctest();
 
};
 
};
 +
#endif
 
</syntaxhighlight2>
 
</syntaxhighlight2>
 
<span style="color: #ffffff; background-color: #555555; padding: 0px 5px 0px 5px; display: inline-block;">cpp <span>(</span>Ctest.cpp<span>)</span></span><!-- padding 上 右 下 左-->
 
<span style="color: #ffffff; background-color: #555555; padding: 0px 5px 0px 5px; display: inline-block;">cpp <span>(</span>Ctest.cpp<span>)</span></span><!-- padding 上 右 下 左-->
 
<syntaxhighlight2 lang="cpp" line>
 
<syntaxhighlight2 lang="cpp" line>
#include "test.h";
+
#include "ctest.h"
     void Ctest::Ctest(int iArraySize){
+
     Ctest::Ctest(int iArraySize){
 
         piValue = new int[iArraySize];  
 
         piValue = new int[iArraySize];  
 
     }
 
     }
     void Ctest::~Ctest(){
+
     Ctest::~Ctest(){
 
         delete piValue;
 
         delete piValue;
 
     }
 
     }
74行: 80行:
 
<span style="color: #ffffff; background-color: #555555; padding: 0px 5px 0px 5px; display: inline-block;">cpp <span>(</span>Destruct_Main.cpp<span>)</span><!-- padding 上 右 下 左-->
 
<span style="color: #ffffff; background-color: #555555; padding: 0px 5px 0px 5px; display: inline-block;">cpp <span>(</span>Destruct_Main.cpp<span>)</span><!-- padding 上 右 下 左-->
 
<syntaxhighlight2 lang="cpp" line>
 
<syntaxhighlight2 lang="cpp" line>
 +
#include <cstdio>
 +
#include "ctest.h"
 +
 +
using namespace std;
 
int main(){
 
int main(){
 
     Ctest *pCtest;
 
     Ctest *pCtest;
90行: 100行:
 
== '''5行目''' ==
 
== '''5行目''' ==
 
<span style="color: #ffffff; background-color: #555555; padding: 0px 5px 0px 5px; display: inline-block;">cpp<!-- padding 上 右 下 左-->
 
<span style="color: #ffffff; background-color: #555555; padding: 0px 5px 0px 5px; display: inline-block;">cpp<!-- padding 上 右 下 左-->
<syntaxhighlight2 lang="cpp" line>
+
<syntaxhighlight2 lang="cpp" >
     void Ctest::~Ctest(){
+
     Ctest::~Ctest(){
 
         delete piValue;
 
         delete piValue;
 
     }
 
     }

2021年2月6日 (土) 00:00時点における最新版



個人用ツール
名前空間

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