「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典イメージぴよ画像「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

デストラクタ

pointこの用語のポイント

pointメソッド(関数)だよ

pointインスタンスが破棄されたときに実行されるよ

point「ファイナライザ」と似て非なるやつだよ

スポンサーリンク

簡単に書くよ

デストラクタ(英:destructor)とは

オブジェクト指向(「モノ」に注目した考え方)なプログラミング言語で出てくる用語のひとつ
であり

(人間様から見て)インスタンス(オブジェクト指向の話で出てくる概念のひとつでクラスを具現化した実体)が破棄されたタイミングで実行されるメソッド(「オブジェクトの操作を定義したもの」だけど、動きとしては関数と同じ)のこと
です。


image piyo

詳しく書くよ

順番に見ていきましょう。
まずは予備知識として

関数
オブジェクト指向
クラス
インスタンス
メソッド


について説明します。
「そんなの説明されなくても知ってるよ!」な人は適当に読み飛ばしてください。

関数は「何かを入れると何かをやって何かを返してくれる、処理のまとまり」です。
一般的には、入力を受けて処理をやり、その結果として出力があります。

デストラクタ

ついでなので書いておくと、関数に入れる値は「引数(ヒキスウ)」と言います。

デストラクタ2

関数から出てくる値は「戻り値」です。

デストラクタ3

ちょっと汚い話で恐縮ですが、人間は、ご飯を食べて、ウンチを出します。

デストラクタ4

人間が関数だと考えてください。
ご飯に相当するものが引数です。
ウンチに相当するものが戻り値になります。

デストラクタ5

オブジェクト指向は「『モノ』に注目した考え方」です。
「どんなやつで、どう動く」に注目した考え方です。

デストラクタ6

詳細は、用語「オブジェクト指向」の説明を ご覧ください。

デストラクタ7

オブジェクト指向の理念に沿って作られたプログラミング言語を「オブジェクト指向プログラミング言語」と言います。
有名どころでは、Javaなんかがオブジェクト指向プログラミング言語です。

オブジェクト指向プログラミング言語では

クラス
インスタンス
オブジェクト


の3つの用語が よく出てきます。
この3つは とても大事です。
ざっくりとで良いので関係性を覚えておいてください。

専門家の人からは怒られそうですが、ものすごい大雑把に説明すると

クラス:設計図
インスタンス:実際に作った物
オブジェクト:モノ(クラスとかインスタンスとかを、ふんわりと表現したもの)


です。

クラスは「設計図」です。
「それって、どんなもの?」を示しています。
ピヨ太君の頭の中にある「ピヨピヨ時計は こんな感じだな」がクラスです。

デストラクタ8

インスタンスは「実際に作ったもの」です。
クラス(設計図)に書かれた「それって、どんなもの?」を形にしたものを指します。
実際に作ったピヨピヨ時計がインスタンスです。

デストラクタ9

オブジェクトは……モノですよ、モノ。
結構ざっくりとした使われ方をする用語です。
「クラスとかインスタンスを ふんわりと表現したもの」くらいに解釈してください。
よく分からない人は忘れてしまって かまいません。

デストラクタ10

メソッドは、教科書的な説明をすれば「オブジェクトの『操作』を定義したもの」です。
ただし、今回は

クラス内に定義した関数のこと

と解釈してください。
その方がイメージしやすいと思います。

以上を踏まえて

(人間様から見て)インスタンスを破棄したときに実行されるメソッド

が「デストラクタ」です。

デストラクタ11

クラスは設計図です。
そのままでは使えません。
使いたいときは実際のもの(インスタンス)にして使います。

デストラクタ12

設計図(クラス)をもとにして作った実際のもの(インスタンス)を使い終わりました。
使い終わったら邪魔です。
捨てちゃいます。

デストラクタ13

この「設計図(クラス)をもとにして作った実際のもの(インスタンス)を捨てるタイミング」で実行される関数(メソッド)がデストラクタです。

デストラクタ14

以上でデストラクタの基本的な説明は終わりです。

ここからは少しばかりややこしい補足説明が始まります。
余裕がある方は頑張って読んであげてください。
脳みそから煙が出そうな人は無理する必要ありません。
ゆっくり休んでください。

休め

あっ、読んでくださるのですね。
ありがとうございます。

それでは、いってみましょう。

実は、デストラクタと似て非なるものに「ファイナライザ」があります。

ファイナライザは「インスタンスが破棄されたタイミングで実行されるメソッド」です。

デストラクタ15

おっと、デストラクタも「インスタンスが破棄されたタイミングで実行されるメソッド」でした。
何が違うのでしょうね?

デストラクタとファイナライザの違いを理解するには「ガベージコレクタ」と呼ばれるやつを理解しておく必要があります。
まずはガベージコレクタについて、お勉強しましょう。

ガベージコレクタは「メモリの掃除屋さん」です。
プログラムで使わなくなったメモリを解放するお仕事をしています。

デストラクタ16

ガベージコレクタは、すべてのプログラミング言語にいるわけでは ありません。
ガベージコレクタがいるプログラミング言語もあれば、いないプログラミング言語もあります。
例えば、Javaにはガベージコレクタがいます。
C++にはガベージコレクタがいません。

Javaのようにガベージコレクタがいるプログラミング言語で作ったプログラムの場合、実際にインスタンスが破棄されるタイミングはガベージコレクタ次第です。

例えば、Javaで「Piyota」クラスのインスタンス「p」を作ったとしましょう。
この時点でメモリ上にインスタンス「p」が乗っかります。

デストラクタ17

インスタンス「p」にあれやこれやの処理をさせました。

その後、インスタンス「p」は用済みになりました。
「もう使わないよ!」状態です。

ところがどっこい、Javaでは、この使わなくなったインスタンス「p」を捨てられません。
使わなくなっても、メモリ上には置きっぱなしにしておくしかないのです。

デストラクタ18

邪魔ですよね?
もう使わないのにメモリ上にあっても仕方がありません。

ここで登場するのがガベージコレクタです。

ガベージコレクタさんは、ふらふらと巡回しています。

デストラクタ19

そして、メモリ上に「あれ?これって、もう誰も使っていないじゃん」なものを見つけたら回収していってくれるのです。

デストラクタ20

つまり、Javaにおいてはガベージコレクタさんが回収していってくれた時点でインスタンスが破棄されます。
本当の意味でインスタンス「p」がメモリ上から消えるのは、ガベージコレクタさんが回収してくれたときなのです。

この「ガベージコレクタさんが回収してくれたタイミング」で実行される関数がファイナライザです。

デストラクタ21

注意点として、ガベージコレクタさんがいつ回収してくれるかはガベージコレクタさん次第です。
つまり、ファイナライザがいつ実行されるかもガベージコレクタさん次第です。
人間様は関知できません。

一般的に、デストラクタは「人間様から見て破棄された瞬間」に実行されます。
例えば「これは、もう使わないから捨てるね!」な指示を書いたとしましょう。
C++を例にすれば

delete p;

のような内容です。
この内容が実行されたタイミングでデストラクタは動きます。

あるいは「これは、もう使えないからね」な状態になったら実行されます。
いわゆる「スコープの範囲外になったら」な状態です。

それに対して、ファイナライザは「ガベージコレクタから見て破棄された瞬間」に実行されます。
ガベージコレクタさんが回収したタイミングで実行されるのです。
人間様は、いつ実行されるか分かりません。

これがデストラクタとファイナライザの違いです。

デストラクタ:人間様から見て、インスタンスが破棄されたタイミングで実行されるメソッド
ファイナライザ:ガベージコレクタから見て、インスタンスが破棄されたタイミングで実行されるメソッド


です。

デストラクタ22

もしかしたら、プログラミング言語によっては、デストラクタっぽいやつをファイナライザと呼んだり、ファイナライザっぽいやつをデストラクタと呼ぶ場合もあるかもしれませんけどね。
少なくともJavaやC++などの有名どころで登場する「デストラクタ」「ファイナライザ」は、ここまでに長々と書いた通りです。


image piyo2

一言でまとめるよ

まぁ「デストラクタ」って単語が出てきたら「(人間様から見て)インスタンス(オブジェクト指向の話で出てくる概念のひとつでクラスを具現化した実体)が破棄された瞬間に実行される関数(処理のまとまり)なんだな~」と お考えください。

一番上に戻るよ
スポンサーリンク
書籍画像077
書籍画像068

おまけ

■訳してみるよ

「destructor(デストラクタ)」の意味は

・廃物焼却炉
・(軌道をはずれたミサイルの)破壊装置


とかです。





書籍画像
わわわ説明術コラム
宣伝だよ
「分かった!」と思わせる説明の技術 知識ゼロの相手にも伝わるようになる本【Audible】
実践サイバーセキュリティ入門講座 現場に残された痕跡からハッカーの攻撃を暴け
おい点P、動くんじゃねえ!──ニガテ民のための算数と数学の本