__DELETE
Der Operator ist eine Erweiterung der Norm IEC 61131-3.
Der Operator gibt den Speicher von Instanzen wieder frei, die der Operator __NEW dynamisch erzeugt hat. Der Operator __DELETE hat keinen Rückgabewert und der Operand wird nach dieser Operation auf 0 gesetzt.
Syntax: __DELETE (<Pointer>)
Wenn Pointer auf einen Funktionsbaustein zeigt, ruft TwinCAT die zugehörige Methode FB_exit auf, bevor der Pointer auf 0 gesetzt wird.
Umgang mit dynamischem Speicher Geben Sie immer den genauen Typen der Instanz an, dessen Speicher freigegeben werden soll. |
Beispiel:
Funktionsbaustein FB_Dynamic:
FUNCTION_BLOCK FB_Dynamic
VAR_INPUT
nIn1, nIn2 : INT;
END_VAR
VAR_OUTPUT
nOut : INT;
END_VAR
VAR
nTest1 : INT := 1234;
_inc : INT := 0;
_dut : POINTER TO DUT;
bNeu : BOOL;
END_VAR
nOut := nIn1 + nIn2;
Methode FB_exit:
METHOD FB_exit : BOOL
VAR_INPUT
bInCopyCode : BOOL;
END_VAR
__DELETE(_dut);
Methode FB_init:
METHOD FB_init : BOOL
VAR_INPUT
bInitRetains : BOOL;
bInCopyCode : BOOL;
END_VAR
_dut := __NEW(DUT);
Methode INC:
METHOD INC : INT
VAR_INPUT
END_VAR
_inc := _inc + 1;
INC := _inc;
Programm MAIN:
PROGRAM MAIN
VAR
pFB : POINTER TO FB_Dynamic;
bInit : BOOL := TRUE;
bDelete : BOOL;
nLoc : INT;
END_VAR
IF (bInit) THEN
pFB := __NEW(FB_Dynamic);
bInit := FALSE;
END_IF
IF (pFB <> 0) THEN
pFB^(nIn1 := 1, nIn2 := nLoc, nOut => nLoc);
pFB^.INC();
END_IF
IF (bDelete) THEN
__DELETE(pFB);
END_IF