如何在共享库的生命周期中存储数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在共享库的生命周期中存储数据相关的知识,希望对你有一定的参考价值。

我正在用C ++编写一个共享库,它将通过JNI调用。我有一个类从Java接收消息并转发到适当的对象。我们称之为Dispatcher。有一个DataStore必须存在于该计划的生命周期。实际上一些数据必须可以在JNI调用之间访问。

我目前的草图由两个类组成单例。 DataStore看起来像这样:

class DataStore {
    // constructors, get_instance() etc. are skipped
    int _read_only_variable{};
public:
    DataStore (int param) : _read_only_variable(param) {}
    // or
    void set_data(int param) {
        _read_only_variable = param
    }
};

我如何保证只有一个Dispatcher对象可以创建一个DataStore对象或只有Dispatcher可以调用set_data

从另一方面来说,如果我保证_read_only_variable实际上只是在构造函数中编写,那么将确保只存在一个实例。

我也想要适合SOLID原则,因此我会避免嵌套类。

答案

你可以保证只有Dispatcher通过将它们设为私有来调用这些方法,然后使Dispatcher成为friend

附:一个_read_only_variable将是C ++中的const。编译器会大声抱怨你试图修改它。但它只保证每个数据存储区有一个_read_only_variable,这非常简单而不是你想要的。

以上是关于如何在共享库的生命周期中存储数据的主要内容,如果未能解决你的问题,请参考以下文章

如何让自定义视图观察包含片段的生命周期事件而不是活动?

导航架构片段重载问题

Android Studio Gradle:请从您的构建脚本中删除 `jcenter()` Maven 存储库的使用/JCenter 已结束生命周期

如何在新的 SwiftUI 应用生命周期中接受 CloudKit 共享?

在不存在的片段上调用片段生命周期和 onCreate 的问题

Android片段生命周期:onResume调用了两次