<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Fri, Jan 27, 2017 at 12:52 PM, Jon Foster <span dir="ltr"><<a href="mailto:jon-lists@jfpossibilities.com" target="_blank">jon-lists@jfpossibilities.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Correct me if I'm wrong: It would seem like that your free implementation doesn't actually do anything, other than fulfilling the obligation of having a "free". If I do this:<br></blockquote>
<br>
var<br>
    o: TObject;<br>
begin<br>
    o:=TObject.create;<br>
    { do something ... }<br>
    o.free;<br>
end.<br>
<br>
Wouldn't "o" still contain a reference after "free" is called? In non-JVM FPC "self" is just another variable, who's origin is somewhat hidden by the compiler. The call to "o.free" would do something like "TObject.free(o)" where "o" is passed by *value* into the procedure variable "self". "Self" comes and goes with the scope of the "TObject.free" procedure. Which is why if I'm concerned about detecting whether or not "o" still contains a correct object reference I would need to do something like this: "o.free; o:=nil;" so I can test for "nil" later. Although I think FPC added a procedure to do that some time back. Yup, I see it "SysUtils.FreeAndNil".<br>
<br>
I'm not sure of the specific semantics of the JVM calls but from what I read in the various FPC JVM related pages on the wiki it would seem to use similar semantics.</blockquote><div><br></div><div>Object Pascal semantic of calling .Free suggests that "o" would no longer be a valid object.</div><div>If a dummy Free method is available for JVM, then such semantic is violated.</div><div><br></div><div>However, if JVM free method would at least reset "o" reference to nil, then the semantic of "o" being an invalid object remains.</div><div><br></div><div>It also suggests to the garbage collector that the memory could be recycled earlier, that the variable leaves the scope.</div><div><br></div><div>thanks,</div><div>Dmitry</div><div><br></div><div><br></div></div></div></div>