当一个外部函数声明为
int open_db(char *path, Db **db)
在内部创建一个 Db 实例并将指针分配给*db
,从 Chez Scheme 处理此问题的最有效方法是什么?
我唯一能想到的就是使用 foreign-alloc 为 C 指针分配内存,将地址传递给它,复制地址,然后立即释放该内存:
(define open_db (foreign-procedure "open_db" (string void*) int))
(define-record-type db (fields (mutable ptr)))
(define (open-db path)
(let ((pptr (foreign-alloc (foreign-sizeof 'void*))))
(open_db path pptr)
(let ((ptr (foreign-ref 'void* pptr 0)))
(foreign-free pptr)
(make-db ptr))))
有没有办法避免为指针临时分配内存?