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.
>>
>

Reply via email to