有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

SWIG C++/爪哇中使用导演的内存管理

<>我试图用SWIG为我的C++库创建一个java包装器。 为了在Java编程环境中获得所需的所有特性,我需要控制器。 更具体地说,我需要java用户能够从C++类继承并实现某些方法。 特别是,需要实现的方法之一是某种clone()方法

<>在C++中,用户实现提供了一个对象指针^ {< CD2>}。然后,该指针由库本身管理

Base* Derived::clone() {
  return new Derived(*this);
}
包装器的问题是,{{CD3}}的java代理类默认地获得相应C++类的类^ ^ {CD4>}的管理。p>

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

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

class Derived {
  ...
  Base clone() {
    return new Derived(this);
  }
}

到目前为止,为了使其工作并避免对复制的Java实例进行垃圾收集,我使用了http://www.swig.org/Doc2.0/SWIGDocumentation.html#CSharp_memory_management_member_variables中提到的技巧

<> p>并确保java ^ {< CD6>}类永远不会删除相应的C++导演类^ {CD4>},我使用^ {CD8>}来设置C++实例包装代码中复制实例的java cMeMeN旗标志的值,即方法^ {CD9>}。p>

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

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


共 (0) 个答案