C ++中同一进程中的多个静态类实例

时间:2015-03-13 18:47:10

标签: c++ class static global-variables

我正在使用一个用C ++编写的大型项目(摩西,smt翻译)。情况是它将初始设置存储在名为“StaticData”的非静态类中,静态字段为“instance”(StaticData.h)。任何其他类使用“StaticData.GetInstance()”来访问当前的smt模型设置。现在的问题是:如果使用最少的代码更改,使用多个(至少两个)“StaticData”类实例会怎么做?可能有办法隔离在C#中执行类似AppDomain的部分代码吗?

1 个答案:

答案 0 :(得分:0)

怎么样:

#include <unordered_map>
#include <memory>

using namespace std;

class StaticData {
public:
   static StaticData* CreateState(unsigned int id) {
      static unordered_map<unsigned int, unique_ptr<StaticData> > states;
      auto i = states.find(id);
      if (i != states.end()) {
     return i->second.get(); 
      } else {
     states.insert(make_pair<unsigned int, unique_ptr<StaticData> >(
              static_cast<unsigned int>(id), unique_ptr<StaticData>(new StaticData())));
     return CreateState(id);
      }
   }
private:
   StaticData()
   {
   }

};

int main() {
   StaticData* s = StaticData::CreateState(123);
   StaticData* s2 = StaticData::CreateState(124);
   StaticData* s3 = StaticData::CreateState(123);
   if (s != s3) {
      return 1;
   }
   return 0;
}