インスタンス
読み:インスタンス
外語:instance

 オブジェクト指向の環境やプログラミング言語で、実行される際に作成されるオブジェクトの実体のこと。英語の原義では、(論拠となる)例、実例、例証のこと。
目次

概要
 オブジェクト指向言語の多くは、クラスと呼ばれるオブジェクトの雛形をあらかじめ作っておく。このクラスを元に作成したオブジェクトをインスタンスという。
 一度定義されたクラスからは、いくつでもインスタンスを生成することができる。
 以下は、C++を例とする。

特徴

インスタンス化
 C++では、クラスの実体をインスタンスといい、クラスを実体化することをインスタンス化という。
 例えば HOGE というクラスがあった場合、構造体と同様にローカル変数としてクラスを実体宣言することができる。
 HOGE hoge;
 あるいは、クラスを動的確保して使う方法もある。
 HOGE *hoge = new HOGE;
 そしてプログラマーは、hoge というインスタンスについて操作をすることになる。
 この二つの使用方法の最大の違いは、寿命である。

寿命
 インスタンスには寿命が存在し、プログラムの実行中のどこかのタイミングで消える。
 C++では明示的に削除することが可能で、また「スコープ」から外れた場合には自動的に消される。一方で、Javaのように明示的には削除できず、全てガベージコレクションに任せる仕様のものもある。
 HOGE hoge;
 このように、ローカル変数としてクラスを実体宣言した場合、{}の中つまりそのブロック構造の中がスコープであり、そのスコープが終了した時点で、一般の変数と同様にインスタンスの寿命が切れる。寿命が切れた時点で、クラスのデストラクターが呼び出される。if文、for文、while文などが{}でブロックになるほか、関数そのものも{}でブロックである。また、特に何もなく{}でブロックを作ることもできる。
 HOGE *hoge = new HOGE;
 一方、このようにクラスをnewで動的確保した場合、明示的にdeleteするまで寿命は継続する。deleteした時点でインスタンスの寿命が切れてデストラクターが呼び出されるが、deleteしない場合、プログラムが終了してもデストラクターが呼ばれることはない。

補足
 プログラミング言語以外でも、インスタンスという用語が使われることがある。

Windows
 16ビット版Microsoft Windowsでは、Windows 3.1までは、実行されたプログラム1個をインスタンスと呼んでいた。
 16ビットWindowsの場合、ノンプリエンプティブマルチタスク環境であったため、通常のマルチタスクでいうところのプロセスのことを、呼び分ける目的でインスタンスと呼んだ。

FLASH
 Macromedia FLASHの場合は、ムービー上に置いたシンボルのことをインスタンスという。
 シンボルという呼称だけでは違うキーフレームに同じシンボルを配置した時に区別できなくなるため、違う呼称がある。

再検索