New 演算子

オブジェクトを生成します。


書式

pObj = New [[num]] CClass[(parameter)]
pObj
生成されるオブジェクトのポインタを格納するためのオブジェクトポインタ変数です。
num
オブジェクト配列を生成する場合は、添え字上限値を指定します。生成するオブジェクトが単体のときは省略できます。ここで指定する値を添え字上限値から要素数に切り替えるときは、ELM関数を利用してください。
CClass
クラスを指定します。
parameter
コンストラクタのパラメータを指定します。パラメータが一つも定義されていないときは省略することができます。

解説

New演算子は他の演算子と組み合わせて使用することはできません。

New演算子を実行すると、オブジェクトのメンバ変数を格納するためのメモリがヒープ領域に確保されます。また、コンストラクタが自動的に呼び出されます。

オブジェクトが不要になったら、Delete演算子を使ってオブジェクトを破棄する必要があります。

New演算子、Delete演算子にはクラス以外の型を指定できないので、注意してください。標準の型(クラス以外の型)のメモリ確保を行うときは、malloc関数(またはcalloc関数)、free関数をご利用ください。

サンプルコード

Class CHuman
    pName As BytePtr    '名前バッファへのポインタ
    BirthYear As Long   '誕生年

    '年齢を取得するための関数
    Function GetAge() As Long
        Dim st As SYSTEMTIME
        GetLocalTime(st)
        GetAge=st.wYear-BirthYear
    End Function

Public
    'コンストラクタ
    Sub CHuman(buf As BytePtr, n As Long)
        'メモリを確保し、名前をセット
        pName=malloc(lstrlen(buf)+1)
        lstrcpy(pName,buf)

        '誕生歳をセット
        BirthYear=n
    End Sub

    'デストラクタ
    Sub ~CHuman()
        '名前で使用したメモリを解放
        free(pName)
    End Sub

    'データを表示するための関数
    Sub ShowHumanData(hWnd As DWord)
        Dim buf[255] As Byte

        wsprintf(buf,Ex"名前:%s\r\n%d年生まれ\r\n今年で%d歳",pName,BirthYear,GetAge())
        MessageBox(hWnd,buf,"Class Test",MB_OK)
    End Sub
End Class

Sub Main()
    'オブジェクトポインタを定義
    Dim pHuman As *CHuman

    'オブジェクトを生成
    pHuman = New CHuman("Daisuke",1983)

    Dim hDeskWnd As DWord
    hDeskWnd=GetDesktopWindow()

    'オブジェクトのデータを表示する
    pHuman->ShowHumanData(hDeskWnd)

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

'メイン関数の呼び出し
Main()



ClassステートメントDelete演算子