我正在用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
原则,因此避免嵌套类。
答案 0 :(得分:2)
通过将它们设为私有,然后将Dispatcher
设为Dispatcher
,可以保证只有friend
会调用这些方法。
P.S。 _read_only_variable
在C ++中为const
。编译器会大声抱怨您尝试对其进行修改。但这只能保证每个数据存储区只有一个_read_only_variable
,这很简单,不是您想要的。