Now imagine that a pointer eliminated from array with classical deletion is used by any software: yours again, an other, or system.
If it will be used as pointer again, any change to it will directly affect the memory location related to your software.
You'll get undesired changes, very dangerous ones, because of a Troy's Horse you accidentally give away.
So, just like you create a link to variable with a pointer, you simply need to destroy this link (then eventually you can delete the variable)
procedure TForm1.deleteEmployee(id:integer); var i,k,imax,deletepoint :integer; begin imax:=self.findNumberOfEmployees-1; deletepoint:=0; for i:=0 to imax do begin if self.EmployeeArray[i]^.id = id then begin deletepoint:=i; if deletepoint < imax then begin dispose(self.EmployeeArray[deletepoint]); //FREE the created pointer for k:=deletepoint+1 to imax do begin self.EmployeeArray[k-1]:=self.EmployeeArray[k]; end; self.EmployeeArray[imax]:=nil; SetLength(self.EmployeeArray, imax); end else begin //deletepoint = imax dispose(self.EmployeeArray[imax]); //FREE the created pointer SetLength(self.EmployeeArray, imax); end; break; end; end; end;
Dispose is the procedure to remove the link and to free pointer: after that the pointer doesn't exist anymore (logically).
With dispose executed you can reorder array in any way you desire, without any danger.
In particular we see here that if the pointer to be disposed is in the middle of array, then we after move items to prior positions (from k to k-1) and then we assign nil to last pointer, which formally doesn't belong to array anymore, but still lives.
nil is not the same of dispose application; simply pointer points to nothing, but still exists.
Same situation if pointer to be disposed is the last: here we assign the nil value.
Is it a dangerous case?
No, but only thanks to SetLenght, which rewrites the boundaries of array, and it destroys every item remained out too: so we make the same of dispose.
[If SetLength makes range bigger, then it automatically creates variables of type that array hosts]