Buchempfehlung
Visual Basic 6 Kochbuch
Visual Basic 6 Kochbuch
Viele praktische Tipps zum Programmieren mit Visual Basic 6, die sich oft auch auf FB übertragen lassen. [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 (2)

Uploader:MitgliedTJF
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