1

我一直在尝试用对象控制底层本机对象的生命周期的想法来包装 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 中的内存浪费/泄漏的最佳方法是什么?

4

1 回答 1

1

Kotlin/Native 无法按照您的意愿以 C++ 方式工作。目前,最佳实践仍然是dispose()在您的类中提供您自己的方法。在我的回答中,我指的是这个GitHub 问题和Kotlin 公开 Slack 中的这个对话。我还推荐这些资源作为讨论 Kotlin/Native 的首选场所。

于 2019-08-13T07:08:44.840 回答