fb:porticula NoPaste
Testfälle zu SHARED (2)
Uploader: | TJF |
Datum/Zeit: | 25.06.2011 16:54:24 |
' Testfälle zur Vorführung des Zusammenhangs von
' SHARED und der Initialisierung von UDTs.
' (siehe auch
' http://www.freebasic-portal.de/porticula/testfaelle-zu-shared-1277.html)
'
' DIM SHARED sorgt bei Variablen eines UDTs dafür,
' dass Objekte vor dem Programmstart initialisiert werden.
'
' Dies gilt jedoch nicht, wenn der Oprator NEW verwendet wird.
'
' ALLOCATE/CALLOCATE erzeugen dagagen kein Objekt, sondern
' reservieren den Speicher ohne den CTor aufzurufen.
#DEFINE Testfall 1 ' 1-8 eingeben und starten
?"Testfall: "; Testfall
TYPE foo2
bar AS INTEGER
DECLARE CONSTRUCTOR ()
END TYPE
CONSTRUCTOR foo2 ()
PRINT "Ctor2"
END CONSTRUCTOR
TYPE foo
AS foo2 bar
DECLARE CONSTRUCTOR ()
END TYPE
CONSTRUCTOR foo ()
PRINT "Ctor1"
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 1"
VAR x7 = NEW foo
PRINT "Delete x7"
DELETE x7
#ELSEIF Testfall = 8
PRINT "Var Shared x8 = CAST(foo PTR, 0) - Wie Fall 1"
VAR SHARED x8 = CAST(foo PTR, 0)
x8 = NEW foo
PRINT "Delete x8"
DELETE x8
#ENDIF
PRINT
PRINT "Programmende"
PRINT
PRINT
#IF NOT __FB_UNIX__
SLEEP
#ENDIF
' Reihenfolge:
' Start1 Start2 Ctor1 Ctor2
' Test1 1 2 4 3
' Test2 1 4 3 2
' Test3 1 2 - -
' Test4 1 2 - -
' Test5 1 2 4 3
' Test6 1 2 4 3
' Test7 1 2 4 3
' Test8 1 2 4 3