SWIG C++/爪哇中使用导演的内存管理 我试图用SWIG为我的C++库创建一个java包装器。 为了在Java编程环境中获得所需的所有特性,我需要控制器。 更具体地说,我需要java用户能够从C++类继承并实现某些方法。 特别是,需要实现的方法之一是某种克隆方法 在C++中,用户实现提供了一个对象指针BASE *。然后,该指针由库本身管理 Base* Derived::clone() { return new Derived(*this); } 包装器的问题是,java的代理类默认地获得相应C++类的SigigDistRoBaseBub的管理。

SWIG C++/爪哇中使用导演的内存管理 我试图用SWIG为我的C++库创建一个java包装器。 为了在Java编程环境中获得所需的所有特性,我需要控制器。 更具体地说,我需要java用户能够从C++类继承并实现某些方法。 特别是,需要实现的方法之一是某种克隆方法 在C++中,用户实现提供了一个对象指针BASE *。然后,该指针由库本身管理 Base* Derived::clone() { return new Derived(*this); } 包装器的问题是,java的代理类默认地获得相应C++类的SigigDistRoBaseBub的管理。,java,c++,swig,Java,C++,Swig,这当然适用于一般情况,但不适用于此特定的用户定义克隆函数 我个人的限制是,我的C++库的java包装不使用java特定的代码,因此用户实现应该像: class Derived { ... Base clone() { return new Derived(this); } } 到目前为止,为了使其工作并避免对复制的Java实例进行垃圾收集,我使用了中提到的技巧 P>并确保Java派生类永远不会删除相应的C++导演类SWigDigTrimBaseBASE,我使用%Type

这当然适用于一般情况,但不适用于此特定的用户定义克隆函数

我个人的限制是,我的C++库的java包装不使用java特定的代码,因此用户实现应该像:

class Derived {
  ...
  Base clone() {
    return new Derived(this);
  }
}
到目前为止,为了使其工作并避免对复制的Java实例进行垃圾收集,我使用了中提到的技巧

<> P>并确保Java派生类永远不会删除相应的C++导演类SWigDigTrimBaseBASE,我使用%Type EMAPrdRoToRoad来从C++包装代码中设置复制实例java java标记的值,即方法SigigDisturyBase::Copy.

我对这个解决方案不太满意,因为它适用于所有返回基类指针的方法,不管它是否是复制方法


有没有关于如何以特定于函数的方式执行此操作的想法?或者以任何其他方式?

你能给出一个更完整的例子吗?即,显示问题所需的最小头文件、接口文件和Java?我有点难以看清问题所在。