SWIG C++/爪哇中使用导演的内存管理
<>我试图用SWIG为我的C++库创建一个java包装器。 为了在Java编程环境中获得所需的所有特性,我需要控制器。 更具体地说,我需要java用户能够从C++类继承并实现某些方法。 特别是,需要实现的方法之一是某种clone()
方法
<>在C++中,用户实现提供了一个对象指针^ {< CD2>}。然后,该指针由库本身管理
Base* Derived::clone() {
return new Derived(*this);
}
这当然适用于一般情况,但不适用于此特定的用户定义的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) 个答案