C++の基礎 : new/delete 演算子
new/delete 演算子
C 言語ではヒープ上のメモリを管理するために malloc()/free() 関数を使いました。BREW では malloc() ではなく MALLOC() を、free() ではなく FREE() を使います。SophiaFramework UNIVERSE では malloc() ではなく MemoryAllocate() を、free() ではなく MemoryFree() を使います。また、バッファクラスを用いることもできます。以下で解説するnew/delete演算子を用いれば、malloc()/free()を用いる場面はほとんどないはずです。
C++ 言語では malloc() の代わりに new 演算子を、free() の代わりに delete 演算子を使うことができます。
new 演算子
ヒープ上にオブジェクトを作成するには new 演算子を使います。
Color * pcolor = new Color;
C 言語のように sizeof 演算子を使用して割り当てるメモリ サイズを明示的に指定する必要はありません。
new 演算子はコンストラクタとともに使うこともできます。コンストラクタについては次章で解説します。
【Java では】Java にもヒープ上にオブジェクトを作成するための new 演算子があります。Java ではスタック上にオブジェクトを作成することはできません。
delete 演算子
ヒープ上に作成されたオブジェクトを破棄するには delete 演算子を使います。
Color * pcolor = new Color; ... pcolor を利用するコード ... delete pcoloor;
delete 演算子はオブジェクトのデストラクタを呼び出します。デストラクタについては次章で解説します。
【Java では】Java には delete 演算子に相当するものはありません。Java ではオブジェクトが不要になると自動的に破棄されます。
オブジェクトのポインタからメンバへのアクセス
オブジェクトのポインタからメンバにアクセスするには"." (ドット) ではなく "->" (アロー) を使います。
Color * pcolor = new Color; pcolor->r = 64; pcolor->g = 96; pcolor->b = 32; UInt08 bri = pcolor->Brightness();
この章のまとめ
- ヒープ上にオブジェクトを作成するには new 演算子を使います。
- ヒープ上のオブジェクトを破棄するには delete 演算子を使います。
- オブジェクトのポインタからメンバにアクセスするには "->" (アロー) を使います。
やってみよう
次のようなコードを実行してみましょう! オブジェクト ポインタに対してアローではなくドットを使うとどうなるでしょうか? どのようなエラーになるでしょうか?
Void TestNewDelete(Void) { Color * pcolor = new Color; pcolor->r = 64; pcolor->g = 96; pcolor->b = 32; UInt08 bri = pcolor->Brightness(); SFXHelper::dbgprintf("Brightness = %d", bri); delete pcolor; }