ホーム > 製品情報 > SophiaFramework UNIVERSE > チュートリアル > C++ の基礎 > new / detete 演算子

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();

この章のまとめ

やってみよう

次のようなコードを実行してみましょう! オブジェクト ポインタに対してアローではなくドットを使うとどうなるでしょうか? どのようなエラーになるでしょうか?

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;
}