class A { private: static int a; //聲明但未定義 static std::map<std::string,int>fileMap; }; int A::a = 3; //定義了 std::map<std::string, int> YuvMap::fileMap = std::map<std::string, int>();
#include <iostream> #include <map> using namespace std; class A { public: static map<int,int> m; }; map<int,int> A::m; int main() { A::m.insert(make_pair(1,2)); return 0; }
靜態成員變量的初始化必須在類的外部
靜態成員變量的析構,你不用管它就是了
1. static 成員程序退出前(main函數之后),會被析構,這種情況通常你不用管。
2. static指針成員,一般情況也不用去手動釋放,除非代碼依賴於這個指針所指向對象析構函數所帶來的副作用。這時候,可以在確保這個被指向的對象絕對不會再被其他全局變量再使用的情況下,利用std::at_exit()來釋放。有點復雜,你就先當做不需要釋放就行了。