Class: FFI::ManagedStruct
Overview
FFI::ManagedStruct allows custom garbage-collection of your FFI::Structs.
The typical use case would be when interacting with a library that has a nontrivial memory management design, such as a linked list or a binary tree.
When the Struct instance is garbage collected, FFI::ManagedStruct will invoke the class’s release() method during object finalization.
Instance Method Summary collapse
-
#initialize(pointer = nil) ⇒ ManagedStruct
constructor
A new instance of FFI::ManagedStruct.
Methods inherited from Struct
#align, #alignment, alignment, auto_ptr, by_ref, by_value, #clear, in, layout, #members, members, offset_of, #offset_of, offsets, #offsets, out, ptr, size, #size, size=, #to_ptr, val, #values
Constructor Details
#initialize(pointer) ⇒ ManagedStruct #initialize ⇒ ManagedStruct
A new instance of FFI::ManagedStruct.
77 78 79 80 81 |
# File 'lib/ffi/managedstruct.rb', line 77 def initialize(pointer=nil) raise NoMethodError, "release() not implemented for class #{self}" unless self.class.respond_to?(:release, true) raise ArgumentError, "Must supply a pointer to memory for the Struct" unless pointer super AutoPointer.new(pointer, self.class.method(:release)) end |