def initialize(ptr, proc=nil, &block)
raise ArgumentError, "Invalid pointer" if ptr.nil? || !ptr.kind_of?(Pointer) \
|| ptr.kind_of?(MemoryPointer) || ptr.kind_of?(AutoPointer)
free_lambda = if proc and proc.is_a? Method
AutoPointer.finalize(ptr, AutoPointer.method_to_proc(proc))
elsif proc and proc.is_a? Proc
AutoPointer.finalize(ptr, proc)
else
AutoPointer.finalize(ptr, AutoPointer.method_to_proc(self.class.method(:release)))
end
self.parent = ptr
ObjectSpace.define_finalizer(self, free_lambda)
self
end