我需要在C++库中将一些API封装成C语言库。我之前做过类似的事情,使用了不透明指针来表示类对象、extern "C"等,具体描述见这里。但是,我现在处理的这个新库广泛使用引用计数智能指针。我不确定如何在存在智能指针的情况下进行封装。例如,假设C++库有以下函数:
SmartPointer<MyClass> foo() {
SmartPointer<MyClass> ret(new MyClass); // Create smart pointer ret
ret->DoSomething(); // Do something with ret
return ret;
}
如何在C中封装foo()? 明显,我需要一个不透明的指针(如void *或空结构指针),以便我可以在C函数中引用MyClass对象。我想到的第一个选项是从ret中提取MyClass对象,并将其转换为void *。但是,由于智能指针执行的自动删除,这个void *在ret超出范围后将变得悬空(如果我错了,请纠正我)。另一种选择是分配一个指向智能指针的指针(例如retPtr),执行*retPtr = ret,然后创建指向retPtr的不透明指针。我认为这个选项可能有效,但这是最好的方式吗?
感谢任何帮助。
ObjectType
的成员吗?还是只是暂时持有指针然后稍后释放?另外,ObjectType
和MyClass
之间有什么关系? - M.M