c - Kotlin native : C objects ownership and lifespan

标签 c kotlin memory-management kotlin-native cinterop

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

在 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 中防止内存浪费/泄漏的最佳方法是什么?

最佳答案

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

关于c - Kotlin native : C objects ownership and lifespan,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57440895/

相关文章:

arrays - C 数组问题在不同平台上显示不同结果

c++ - 使用 Linux C 代码和头文件编译 Windows DLL

c - 如何强制cppstyle使用c和h文件?

dictionary - Kotlin:集合定义的差异

c - mprotect 后 malloc 导致段错误

java - 如何使用 JNA 在 Java 中传递包含 char* 的结构并避免数据复制?

Android 支持库 27、Fragment 更新?

android - 创建自定义 ActivityResultContract 以请求位置权限

c - 除了页面级映射之外,文件的 mmap 可以通过任何其他方式完成吗?

objective-c - 为什么我不应该在 init 方法中使用访问器方法