new
読み:ニュー
外語:new
C++/Java/C#などの予約語の一つ。オブジェクトを作成し、コンストラクターを呼び出す演算子。
概要
ヒープなどにインスタンスを確保し、オブジェクトのポインター(C++の場合)や参照(Javaの場合)を返す演算子である。
C++では、実行時のオブジェクトの生成はスタックとヒープに対して行なえるが、Javaでは常にヒープに生成する。
作成されたインスタンスは、C++ではdelete演算子で自発的に解放し、Javaではガベージコレクションにより自動的に解放する。
特徴
C++
C++では、newはポインターを返す。よくある使い方では、ポインター変数で受け取って利用することになる。
Hoge *hoge = new Hoge();
C++ではnew/delete演算子を用いるため、Cで必要だったmalloc()/free()を用いる場面は殆どなくなった。
またmallocとは違い、newでは領域確保をした後、確保したものがクラスのインスタンスであれば続いてコンストラクターを呼び出す機能が利用できる。これらの理由により、C++でmalloc()/free()を用いる理由はほぼなくなった。
なお、もし領域確保に失敗した場合、std::bad_alloc例外を送出する。
Java
Javaでは、newはインスタンスを確保し、オブジェクトの参照を作成して返す。
Hoge hoge = new Hoge();
newで確保されたオブジェクトは、どこからも参照されなくなった時点で自動的に削除されるが、プログラマーが直接削除する術がない。C++と違って、delete相当の機能がない。
再検索