Delphi Compiler Error
E2080 Procedure DISPOSE needs destructor
Reason for the Error & Solution
This error message is issued when an identifier given in the parameter list to Dispose is not a destructor.
program Produce; type PMyObject = ^TMyObject; TMyObject = object F: Integer; constructor Init; destructor Done; end; constructor TMyObject.Init; begin F := 42; end; destructor TMyObject.Done; begin end; var P: PMyObject; begin New(P, Init); (*...*) Dispose(P, Init); (*<-- Error message here*) end.
In this example, we passed the constructor to Dispose by mistake.
program Solve; type PMyObject = ^TMyObject; TMyObject = object F: Integer; constructor Init; destructor Done; end; constructor TMyObject.Init; begin F := 42; end; destructor TMyObject.Done; begin end; var P: PMyObject; begin New(P, Init); Dispose(P, Done); end.
The solution is to either pass a destructor to Dispose, or to eliminate the second argument.