# File lib/ffi/autopointer.rb, line 30
    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