Kotlin Native:C 对象所有权和生命周期

Kotlin Native: C objects ownership and lifespan

我一直在尝试包装 CPointer 类型的本机对象,认为该对象控制底层本机对象的生命周期。

用 C++ 术语来说,我会做类似的事情:

class T {
private:
  U other;
};

甚至:

class T {
public:
  T(){ other = new U; }
  ~T(){ delete other; }
private:
  U other;
};

我什至不确定这是否正确,但想法很简单:对象 "other" 由类型 T 的对象持有。

问题是我不知道这在 Kotlin native 中是否可行:

class T {
  private val arena = Arena()
  private val ptr: Cpointer<U> = arena.alloc()
  // Should I delegate the free method to T?
}

据我所知,arena不会自动回收内存吧?我必须打电话给 .free().clear()


有什么办法可以达到这样的效果吗?或者唯一的方法是使用 memScoped 并手动调用 arena 的 clear 或 ptr free?

或者,在 K/N 中防止内存 waste/leaking 的最佳方法是什么?

Kotlin/Native 无法按照您的意愿以 C++ 方式工作。目前,最佳做法仍然是在您的 class 中提供您自己的 dispose() 方法。在我的回答中,我指的是 Kotlin public Slack 中的 this GitHub issue and this 对话。我还推荐这些资源作为首选 Kotlin/Native-讨论场所。