【发布时间】:2019-08-10 09:22:45
【问题描述】:
我一直在尝试包装 CPointer 类型的原生对象,认为对象控制底层原生对象的生命周期。
在 C++ 术语中,我会这样做:
class T {
private:
U other;
};
甚至:
class T {
public:
T(){ other = new U; }
~T(){ delete other; }
private:
U other;
};
我什至不确定这是否正确,但想法很简单:对象“其他”由 T 类型的对象持有。
问题是我不知道这在 Kotlin 原生中是否可行:
class T {
private val arena = Arena()
private val ptr: Cpointer<U> = arena.alloc()
// Should I delegate the free method to T?
}
在我看来,竞技场不会自动回收记忆吧?我必须打电话给.free() 或.clear()。
有什么办法可以达到这样的效果吗?或者唯一的方法是使用memScoped并手动调用arena的clear或ptr free?
另外,防止内存浪费/K/N 泄漏的最佳方法是什么?
【问题讨论】:
-
我想您是在询问 Kotlin/Native Github 上 this 问题中讨论的内容。如果还不够,请告诉我。
-
谢谢@ArtyomDegtyarev!那么唯一的方法是在我的包装器中使用像 free() 或 dispose() 这样的显式方法?如果你回答我会很乐意接受。遗憾的是没有其他方法,也许从 C++ 的角度来看这个问题让我感到困惑而不是帮助
标签: c kotlin memory-management kotlin-native cinterop