オブジェクト指向のツボ 〜Vol5. New、Delete〜

配列構造になっている構造体を扱うとき、malloc、freeなどの関数を使用していたことと思います。では、オブジェクトに対して、malloc、freeのような動きをさせたいときにはどうすればよいのでしょうか?そんなときに役立つのがNew、Delete演算子です。

Newで生成、Deleteで破棄

Dimステートメントで定義するのが実体オブジェクトなのに対して、New及びDeleteで扱うオブジェクトはオブジェクトポインタを通したものになります。例えば、"Dim obj As CClass" というコードでは、CClassクラスを雛型にしたオブジェクトobjを生成することになりますが、これと同じ意味を持つコードを記述すると下のようなものになります。

'オブジェクトポインタを定義
Dim pObj As *CClass

pObj = New CClass

'オブジェクトpObjに対してのコードをここに記述する

Delete pObj

Newで生成できるオブジェクトは1つではない

New演算子では、2つ以上のオブジェクトを同時に生成することも可能です。下の例は、値を保持するだけのCNumberBoxクラスを定義し、それを元に複数のオブジェクトを生成しています。

コード中に "ELM(3)" という記述がありますが、これは配列要素数を配列上限値に変換するためのマクロ関数です。要するに、"ELM(3)" という指定は、"2" を指定するのと同じってことになります。

Const ELM(n)=n-1

#N88BASIC

Class CNumberBox
Public
    value As Long

    'コンストラクタ
    Sub CNumberBox()
        Print "オブジェクトが生成されました。"
    End Sub

    'デストラクタ
    Sub ~CNumberBox()
        Print "オブジェクトが破棄されました。"
    End Sub

    '値をセットする関数
    Sub SetData(i As Long)
        value = i
    End Sub

    '値を表示する関数
    Sub Show()
        Print "このナンバーボックスには";value;"が入っています。"
    End Sub
End Class

Sub MainProc()
    Dim pObj As *CNumberBox
    Dim i As Long

    '3個のオブジェクトを生成
    pObj = New[ELM(3)] CNumberBox

    '値をセット
    For i=0 To ELM(3)
        pObj[i].SetData(i*100)
    Next

    '値を表示
    For i=0 To ELM(3)
        pObj[i].Show()
    Next

    'オブジェクトを破棄
    Delete pObj
End Sub

Print "今からMainProc関数を呼び出します。"
MainProc()
Print "MainProc関数が終わりました。"


講座インデックスへ戻る ©2005 Discoversoft