如何在共享库的整个生命周期内存储数据

时间:2018-09-12 11:31:56

标签: c++ java-native-interface singleton shared-libraries

我正在用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原则,因此避免嵌套类。

1 个答案:

答案 0 :(得分:2)

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

P.S。 _read_only_variable在C ++中为const。编译器会大声抱怨您尝试对其进行修改。但这只能保证每个数据存储区只有一个_read_only_variable ,这很简单,不是您想要的。