静态成员释放的C++控制顺序

问题描述:

我有一个C++程序,带有引用计数智能指针类。这个类的工作通过映射指向引用计数的静态地图:静态成员释放的C++控制顺序

map<ValueIntern*,unsigned int>& ValueRetainMapGetter(){ 
    static map<ValueIntern*,unsigned int> m; 
    return m; 
} 

,我一直有这个问题是我的参考地图已释放后,已被释放一些静态变量。

我的问题是:如何控制释放静态变量的顺序,以便在所有引用之后解除映射。

+0

在映射为你创建问题之后,“某些静态变量”被“释放”*的事实如何?你的问题绝对不清楚。 – AnT 2010-06-30 20:34:13

我建议使用boost::shared_ptr(或std::tr1::shared_ptr,如果它在您的工具链中)而不是滚动自己的。

+0

甚至有很多boost :: smart指针可供选择:http://www.boost.org/doc/libs/1_43_0/libs/smart_ptr/smart_ptr.htm – jdmichal 2010-06-30 20:27:27

+0

哇,我觉得真的很聪明......但好建议。我之所以使用地图的原因是因为最初,当我第一次写这个类时,它是一个模板类,被设计用于无数其他类。 – Maz 2010-06-30 20:29:02

+0

@Maz:事情不是_class_,它是_template_。可以从中实例化类的模板。这就是为什么它被称为__class模板___。如果它被称为“模板类”,它将不得不成为一个模板类......嗯......我不知道。看到。这就是为什么它被称为“类模板”。 (有,BTW,也是“功能模板”,这些是_templates_从哪个函数实例化,他们不是,我重复一遍:不是,“模板函数”,因为它们不是来自哪个函数......在这里我们再去一次,所以这就是为什么他们被命名为__function templates__。) – sbi 2010-06-30 21:36:01