【问题标题】:Kotlin Native: C objects ownership and lifespanKotlin Native:C 对象的所有权和生命周期
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-03
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 2011-02-19
    相关资源
    最近更新 更多