Buchempfehlung
Windows System Programming
Windows System Programming
Das Kompendium liefert viele interessante Informationen zur Windows-Programmierung auf Englisch. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Referenz - NEW

Referenz-Navigation

 

Syntax A: NEW [(Adresse)] Datentyp [(Parameterliste | ANY)]
Syntax B: NEW [(Adresse)] Datentyp [Anzahl] [{ ANY }]
Typ: Operator
Kategorie: Operatoren

NEW weist dynamisch Speicher zu und erzeugt Daten/Objekte des angegebenen Typs.

NEW weist dynamisch Speicher zu und konstruiert den angegebenen Datentyp. Bei einfachen Typen wie BefehlsreferenzeintragINTEGERs kann ein Anfangswert angegeben werden. Bei Typen ohne Konstruktoren können Anfangswerte für jedes Feld angegeben werden. Bei Typen, die Konstruktoren besitzen, können diese durch NEW auch aufgerufen werden. Wird 'Parameterliste' nicht angegeben, werden die Standardwerte für diese Typen benutzt.

NEW ['Anzahl'] ist die BefehlsreferenzeintragArray-Version von NEW und weist genügend Speicher für die angegebene Anzahl der Objekte zu. Der Standard-BefehlsreferenzeintragKonstruktor des Typs wird dann aufgerufen, um die Anfangswerte jedes Objekts zu setzen.

Objekte, die mit NEW erzeugt wurden, müssen mit BefehlsreferenzeintragDELETE freigegeben werden. Speicher, der mittels NEW [Anzahl] reserviert wurde, muss jedoch mit DELETE [ ], der Array-Version von DELETE, freigegeben werden. Die verschiedenen Versionen der Operatoren dürfen nicht vermischt werden und 'passen' auch nicht zueinander.

Wird NEW mit dem Parameter 'Adresse' verwendet, so reserviert NEW keinen Speicher, sondern erzeugt das Objekt an der vorgegebenen Adresse. Der Speicher muss also schon vorher reserviert werden. Da der Speicher nicht durch NEW reserviert wird, sollte er auch nicht mit BefehlsreferenzeintragDELETE freigegeben werden. Stattdessen sollte der BefehlsreferenzeintragDestruktor des Objekts explizit aufgerufen und der Speicher hinterher mit der zur Reservierung entsprechenden Freigabemethode freigegeben werden.

NEW kann mithilfe von BefehlsreferenzeintragOPERATOR überladen werden.

Beispiel 1:

Type Rational
    As Integer Zaehler, Nenner
End Type

Scope

    ' Erzeugen und Initialisieren eines Rationalbruchs
    ' und Speichern seiner Adresse
    Dim p As Rational Ptr = New Rational(3, 4)

    Print p->Zaehler & "/" & p->Nenner

    ' Löschen des Bruchs und Rückgabe des Speichers
    ' an das System
    Delete p

End Scope

Scope

    ' Speicherreservierung für 100 Integers, Speichern
    ' der Adresse des ersten
    Dim p As Integer Ptr = New Integer[100]

    ' Zuweisen von Werten an die Integers im Array
    For i As Integer = 0 To 99
        p[i] = i
    Next

    ' Freigeben des gesamten Integer-Arrays
    Delete[] p

End Scope

Sleep

Beispiel 2:

Type Rational
    As Integer zaehler, nenner
End Type

' Pointer anlegen und Größe des Types reservieren
Dim As Any Ptr ap = Callocate(SizeOf(Rational))

' Pointer des Types anlegen und neues Objekt an die Stelle
' des bereits reservierten Speichers schreiben
Dim As Rational Ptr r = New (ap) Rational( 3, 4 )

' Beide Pointer haben nun dieselbe Adresse im Speicher
Print ap, r
Print r->zaehler & "/" & r->nenner

' Statt mit DELETE sollte das Objekt durch explizites
' Aufrufen des Destruktors zerstört werden, da DELETE
' den Speicher danach freigibt, was zu Speicherproblemen
' und Programmabstürzen führen kann
r->Destructor( )

' Den Speicher letztlich freigeben
DeAllocate ap

' Auf Tastendruck vor Programmende warten
Sleep

Unterschiede zu QB: neu in FreeBASIC

Unterschiede unter den FB-Dialektformen: nur in der Dialektform Befehlsreferenzeintrag-lang fb verfügbar

Siehe auch:
BefehlsreferenzeintragDELETE, BefehlsreferenzeintragSpeicher


Zusätzliche Informationen und Funktionen
  • Der Referenzeintrag wurde am 24.10.2007 von AdministratorSebastian angelegt.
  • Die aktuellste Version wurde am 27.12.2012 von Redakteurnemored gespeichert.
  Versionen Versionen