gpt4 book ai didi

java - 将 std::unique_ptr 传递给 JNI

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:12:10 25 4
gpt4 key购买 nike

我正在用 JNI 包装一些 C++ 代码,偶然发现了以下工厂函数:

std::unique_ptr<MetricPlanner> create_metric_planner(*arguments*)

我需要将此函数创建的规划器的引用传递回 Java 以供以后使用,但我很困惑a)如何将其传回,以及b) 一旦它被传递下去会发生什么。

通常情况下,我都是这样过去的:

Director *DIRECTOR = new Director(arguments);
return (jlong)DIRECTOR;

它的效果非常好。

有人可以解释当使用返回此类指针的工厂函数而不是普通构造函数时使用 JNI 引用对象的类似过程吗?

最佳答案

由于您将 create_metric_planner 函数的返回值传递给 Java,然后在以后使用它,因此您不希望 unique_ptr 在以下情况下销毁返回值它的范围结束。为此,您必须调用 unique_ptr::release .

return (jlong)create_metric_planner( ... ).release();

不要忘记,在某些时候,当您使用完该函数返回的对象后,您必须删除它(或调用您正在使用的库提供的一些删除函数) .

关于java - 将 std::unique_ptr 传递给 JNI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11512960/

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