Thanks for your reply. I didn't know finalizer(), and that seemed just to be the thing I wanted. Sadly, I couldn't use it for freeing a pointer:
julia> finalizer(c_malloc(1024), c_free) ERROR: objects of type Ptr{None} cannot be finalized And this also wouldn't work: immutable SmartPointer{T} pointer::Ptr{T} function SmartPointer(p::Ptr{T}) smart_p = new(p) finalizer(smart_p, p -> c_free(p.pointer)) end end p = SmartPointer{Uint8}(convert(Ptr{Uint8}, c_malloc(1024))) Am I doing something wrong? On Sunday, March 16, 2014 12:12:31 AM UTC+9, Patrick O'Leary wrote: > > Maybe finalizer() will do what you need? > http://julia.readthedocs.org/en/latest/stdlib/base/#Base.finalizer > > On Saturday, March 15, 2014 9:49:56 AM UTC-5, Kenta Sato wrote: >> >> Hi everyone, >> >> I'm wondering if there are "smart pointers" like C++ in Julia. >> Calling C functions often require managing raw pointers allocated in the >> C functions. >> After allocating a pointer, I want to wrap it up with a smart pointer, >> which automatically frees the raw pointer when the smart pointer itself is >> removed with a garbage collector. >> As for pointers to an array, the `pointer_to_array` method seems to be >> suitable in this case ( >> http://docs.julialang.org/en/latest/stdlib/base/#Base.pointer_to_array). >> >> More generally speaking, I want a functionality that is something like a >> destructor to manage resources more readily. >> Is it possible to call a function just before a Julia object is >> destructed? >> >> Thanks. >> >