2010-06-30 67 views
1

我有一個C++程序,帶有引用計數智能指針類。這個類的工作通過映射指向引用計數的靜態地圖:靜態成員釋放的C++控制順序

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

,我一直有這個問題是我的參考地圖已釋放後,已被釋放一些靜態變量。

我的問題是:如何控制釋放靜態變量的順序,以便在所有引用之後解除映射。

+0

在映射爲你創建問題之後,「某些靜態變量」被「釋放」*的事實如何?你的問題絕對不清楚。 – AnT 2010-06-30 20:34:13

回答

2

我建議使用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