有些变量,类的外部可读但不可写,权限为readonly。C++没有给类提供这样的关键字。
如果只需要写一次,不需要修改,就可以定义为公有常量。那可以使用构造函数对常量成员初始化。
但是有时候,这些数据又来源于配置文件,不能在类中打开再进行初始化。
所以可以考虑用一个类来对这些类的实例进行管理,替它们打开配置文件,再用这些数据去生成一个实例。
class ClassWithReadOnlyData
{
public:
const ReadOnlyData m_r;
ClassWithReadOnlyData(ReadOnlyData r) :m_r(r)
{ };
};
class ManagerClass
{
private:
vector< pair< ClassWithReadOnlyData*,string > > instanceSet;//
public:
ClassWithReadOnlyData*& GetInstanceByName(const string &name);
void AddClassWithReadOnlyData(const string &iniFilePath,const string &name)
{
ReadOnlyData r;
r = getDataFromIniFile(const string &iniFilePath);//从配置文件中读到数据
//拿读到的数据对公有变量进行初始化
ClassWithReadOnlyData* instance = new ClassWithReadOnlyData(r);
instanceSet.push_back( pair< instance,name > );
};
void DeleteClassWithReadOnlyDataByName(const string &name);
};
释放ClassWithReadOnlyData*时,将指针置为NULL,但是不将vector该层删去。
但是没法阻止指针引用将空间释放,只能谁释放谁置NULL。