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!

fb:porticula NoPaste

Info
Info / Hilfe
Liste
Übersicht / Liste
Neu
Datei hochladen
Suche
Quellcode suchen
Download
Dateidownload

Testfälle zu SHARED

Uploader:RedakteurMOD
Datum/Zeit:25.06.2011 15:14:59

' Testfälle zur Vorführung des Zusammenhangs von SHARED und der Variableninitialisierung
'
' SHARED sorgt bei Variablen eines UDTs dafür, dass das Objekt viel früher erstellt wird als man denken würde.
' Ohne SHARED wird das Objekt erst mit der Deklaration erstellt und erst dann der Ctor aufgerufen.
' Mit SHARED wird der Ctor des Objekts zu Programmbeginn aufgerufen.
'
' Für Pointer spielt dieses Verhalten kaum eine Rolle, da Pointer nur Zeiger auf Daten sind und keine direkten Typen haben.
' ALLOCATE/CALLOCATE erzeugen auch kein Objekt sondern reservieren nur Speicher.
' NEW hingegen erzeugt ein Objekt, allerdings erst nachdem NEW aufgerufen wurde.
' Ob die Variable SHARED ist oder nicht spielt keine Rolle.
'
' Da die Reihenfolge des Aufrufs des Ctors nur anders ist wenn per DIM SHARED ein Objekt erzeugt wurde,
' muss auch nur hier explizit darauf geachtet werden.

#Define Testfall 1 ' 1-9 eingeben und starten

Type foo
    bar As Integer
    Declare Constructor ()
End Type

Constructor foo ()
    Print "Ctor"
End Constructor

Sub Start1 Constructor 101
    Print "Start1"
End Sub
Sub Start2 Constructor
    Print "Start2"
End Sub


Print "Programmstart"
Print

#If Testfall = 1
Print "Dim As foo x1 - Ctor wird ohne SHARED hier aufgerufen"
Dim As foo x1

#ElseIf Testfall = 2
Print "Dim Shared As foo x2 - Ctor wird mit SHARED nach der ersten Ctor-Sub aufgerufen"
Dim Shared As foo x2

#ElseIf Testfall = 3
Print "Dim As foo Ptr x3 - Speicherreservierung erzeugt keinen Typen, also kein Ctor"
Dim As foo Ptr x3
Print "x3 = Allocate(SizeOf(foo))"
x3 = Allocate(SizeOf(foo))
Print "DeAllocate x3"
DeAllocate x3

#ElseIf Testfall = 4
Print "Dim Shared As foo Ptr x4 - Wie Fall 3"
Dim Shared As foo Ptr x4
Print "x4 = Allocate(SizeOf(foo))"
x4 = Allocate(SizeOf(foo))
Print "DeAllocate x4"
DeAllocate x4

#ElseIf Testfall = 5
Print "Dim As foo Ptr x5 - Wie Fall 1"
Dim As foo Ptr x5
Print "x5 = New foo"
x5 = New foo
Print "Delete x5"
Delete x5

#ElseIf Testfall = 6
Print "Dim Shared As foo Ptr x6 - Wie Fall 1"
Dim Shared As foo Ptr x6
Print "x6 = New foo"
x6 = New foo
Print "Delete x6"
Delete x6

#ElseIf Testfall = 7
Print "Var x7 = New foo - Wie Fall 5"
Var x7 = New foo
Print "Delete x7"
Delete x7

#ElseIf Testfall = 8
Print "Var Shared x8 = Cast(foo Ptr, 0) - Wie Fall 6"
Var Shared x8 = Cast(foo Ptr, 0)
Print "x8 = New foo"
x8 = New foo
Print "Delete x8"
Delete x8

#ElseIf Testfall = 9
Print "Var Shared x9 = Cast(foo, Type<foo>) - Wie Fall 2"
Var Shared x9 = Cast(foo, Type<foo>)

#EndIf

Print
Print "Programmende"
Sleep