gpt4 book ai didi

c++ - 如何在 C 中包装返回智能指针的 C++ 函数?

转载 作者:可可西里 更新时间:2023-11-01 16:06:23 24 4
gpt4 key购买 nike

我需要将一些 API 包装在 C 语言的 C++ 库中。我过去曾这样做过,使用指向类对象的不透明指针、extern“C”等,如 here 所述。 .然而,我正在处理的这个新库广泛使用了引用计数智能指针。我不确定如何在存在智能指针的情况下进行包装。例如,假设 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*。但是,一旦 ret 由于智能指针自动删除而超出范围,此 void* 将变为悬空(如果我错了请纠正我)。

另一种选择是分配一个指向智能指针的指针(比如retPtr),执行*retPtr=ret,然后创建一个指向的不透明指针返回指针。我认为此选项可能有效,但这是最好的方法吗?

感谢任何帮助。

最佳答案

您几乎必须返回一个指向 C 代码的不透明指针。因此,您需要使用 new 分配一个新的智能指针,您可以将指针返回到该指针。

关于您唯一的选择是使用共享指针的集合来使对象保持事件状态。当 C 代码指示它已完成对象时,您从集合中删除共享指针。这允许您将任何类型的标识符返回给 C 代码——它只是用作在集合中查找对象的句柄。

关于c++ - 如何在 C 中包装返回智能指针的 C++ 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40031537/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com