看板 Programming 關於我們 聯絡資訊
這種寫法會... compile error 型別不對 所有const static member data會在main function之前完成初始化的動作 在main function結束之前被消滅 但是你是用指標 指向一個匿名的暫時物件 雖然會指標會初始化 指標會消滅 但是它所指向的暫時物件不會被消滅 所以在你的程式結束之前 你要自行想辦法把這個東西delete掉 要不然在某些系統可能造成memory leak. 如下: #include <string> using namespace std; class C { private: const static string* foo; public: static void KillFoo() { delete foo; } }; const string* C::foo = new string("hello"); int main() { //your code //... //when you want to kill foo, maybe in the last line of your code C::KillFoo(); //never use foo hereafter... } ======================================================== 你也可以寫個小程式測試一下到底static member data什麼時候會佔記憶體 什麼時候被消滅... #include <cstdio> class Something { public: Something() { printf("constructor\n"); } ~Something() { printf("destructor\n"); } }; class C { const static Something foo; }; const Something C::foo = Something(); int main() { printf("start\n"); printf("main funciton\n"); printf("end\n"); } ============== constructor start main function end destructor ============== ※ 引述《sorryChen (陳揚和)》之銘言: : 想要在class中定義一個const static object. 就說string : 如果在 : Class C { : const static string* foo; : } : const string foo = new string("hello"); : 請問這個string何時被產生(占記憶體)何時被消滅呢 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.67.8.224