* [Caml-list] initializers and destructor
@ 2002-03-31 21:09 Stefano Zacchiroli
2002-03-31 21:41 ` Remi VANICAT
0 siblings, 1 reply; 4+ messages in thread
From: Stefano Zacchiroli @ 2002-03-31 21:09 UTC (permalink / raw)
To: Inria Ocaml Mailing List
Hi all,
I know and frequently use "initializer" construct in classes, but I'm
not able to find something like destructor that works exectly like an
initializer but that is invoked just before an object last reference is
lost.
Is this somewhat difficult to implement in relation with the OCaml GC or
I'm simply missing something?
TIA,
Cheers.
--
Stefano Zacchiroli - undergraduate student of CS @ Univ. Bologna, Italy
zack@cs.unibo.it | ICQ# 33538863 | http://www.cs.unibo.it/~zacchiro
"I know you believe you understood what you think I said, but I am not
sure you realize that what you heard is not what I meant!" -- G.Romney
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Caml-list] initializers and destructor
2002-03-31 21:09 [Caml-list] initializers and destructor Stefano Zacchiroli
@ 2002-03-31 21:41 ` Remi VANICAT
2002-04-01 7:45 ` Stefano Zacchiroli
0 siblings, 1 reply; 4+ messages in thread
From: Remi VANICAT @ 2002-03-31 21:41 UTC (permalink / raw)
To: caml-list
Stefano Zacchiroli <zack@cs.unibo.it> writes:
> Hi all,
> I know and frequently use "initializer" construct in classes, but I'm
> not able to find something like destructor that works exectly like an
> initializer but that is invoked just before an object last reference is
> lost.
>
> Is this somewhat difficult to implement in relation with the OCaml GC or
> I'm simply missing something?
there is the finalise function in the module Gc of the standard
library.
one can write a destructor using it :
# class foo =
let f x = print_string "test"; print_newline () in
object(s)
initializer
Gc.finalise f s
end;;
class foo : object end
# new foo;;
- : foo = <obj>
# Gc.full_major ();;
test
- : unit = ()
#
but you should know that there is some pitfall with finalise :
# class foo =
object(s)
val bar = "test"
initializer
Gc.finalise (fun x -> print_string bar; print_newline ()) s
end;;
class foo : object end
# new foo;;
- : foo = <obj>
# Gc.full_major ();;
- : unit = ()
# Gc.full_major ();;
- : unit = ()
here, the created object is reachable from the closure of
finalisation, so it's reachable, and never garbage collected.
You should carefully read it's documentation
--
Rémi Vanicat
vanicat@labri.u-bordeaux.fr
http://dept-info.labri.u-bordeaux.fr/~vanicat
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2002-04-01 11:19 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-03-31 21:09 [Caml-list] initializers and destructor Stefano Zacchiroli
2002-03-31 21:41 ` Remi VANICAT
2002-04-01 7:45 ` Stefano Zacchiroli
2002-04-01 10:15 ` Remi VANICAT
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).