def autorelease(&block) # {|pool|  }
      prepare_if_needed
      result = nil
      begin
        pool = AutoreleasePool.new
        result = yield(pool)
      ensure
        pool.drain
      end
      result
    end
def autorelease(&block) # {|pool|  }
      prepare_if_needed
      result = nil
      begin
        pool = AutoreleasePool.new
        result = yield(pool)
      ensure
        pool.drain
      end
      result
    end
Creates autorelease pool from which various objects can be created.
 When block returns, pool deallocates all created objects.
 Available methods on pool instance:
 - ec_key       - last EC_KEY (created lazily if needed)
 - group        - group of the ec_key
 - bn_ctx       - lazily created single instance of BN_CTX
 - new_ec_key   - creates new instance of EC_KEY
 - new_bn       - creates new instance of BIGNUM
 - new_ec_point - creates new instance of EC_POINT