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

问题描述 投票:0回答:1

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

c++ java-native-interface singleton shared-libraries
1个回答
2
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.