看板 C_and_CPP 關於我們 聯絡資訊
請問一下 如果我的class內部有一些動態宣告出來的static變數 類似這樣 class A { static A *const v1; ..... }; 然後外面 A *const A::v1 = new A(); 我想問兩個問題 A *const A::v1 = new A(); ^^^^^^^^ 為什麼一定要加這個呢? 如果寫A::v1 = new A(); 會跑出'v1' in class 'A' does not name a type之類的錯誤訊息 另外v1應該什麼時候被釋放? 我應該另外寫一個static member function去做這件事情嗎? 這些原本是從JAVA的程式改的 所以我覺得有很多記憶體管理要寫 但是又不知道必不必要 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.117.171.150
legnaleurc:很簡單, 不要用 singleton 05/10 19:21
legnaleurc:然後 A * const 是型別名稱 ... 你宣告時不就用這個嗎? 05/10 19:22
legnaleurc:在 C++ 用 singleton 只是自找麻煩 05/10 19:22
james732:是因為C++的多執行緒安全很麻煩嗎? 05/10 20:14
Ebergies:C++ 用 singleton 的麻煩之處在? 05/10 20:19
legnaleurc:其中一種看法: http://0rz.tw/3ZCF6 05/10 21:51
legnaleurc:當然多緒安全在 C++ 特別麻煩也是原因之一 05/10 21:51
legnaleurc:有趣的是目前我遇到大多數會大量使用 Singleton 的人 05/10 21:52
legnaleurc:原本都是寫 Java 的,他們的 getInstance 沒有任何mutex 05/10 21:53
legnaleurc:而且雖然他們同意 global varible 很噁心, 但仍然認為 05/10 21:53
legnaleurc:Singleton rocks 05/10 21:53
tomap41017:推樓上好文:) 05/10 22:08
Ebergies:老實說我不覺得這是一個問題。雖然我也曾經想過這類的問 05/10 23:05
Ebergies:題,但那僅止於優雅與否的範疇,多的是方法解決這東東 05/10 23:06
Ebergies:- 只要不排斥稍微髒一點的做法。 05/10 23:07
sudada:那個型別宣告真的是自己腦了XD 至於另外只是想問比較常用 05/10 23:26
sudada:的方法而已 05/10 23:27
yoco315:不要用singleton+1, 老實說, singleton 就是 global var 05/11 01:51
yoco315:令人驚訝的是很多人看到全域變數就想吐,但是覺得單件很好 05/11 01:52
yoco315:這真是很奇怪的現象,單件實際上的意義跟全域變數完全一樣 05/11 01:52
yoco315:我自己不使用singleton最大的原因是程式碼的 testability 05/11 01:53
yoco315:singleton 無法被 dependency injection mock 掉... 05/11 01:54
yoco315:對於 unit test 的撰寫是非常不便的,會導致程式碼的 05/11 01:55
yoco315:可測試性很低,在實質上也跟全域變數一樣會造成bug出現時 05/11 01:55
yoco315:不容易追蹤問題的來源.. 05/11 01:56
yoco315:另外 singleton 也違反 pure function 的設計理念 05/11 01:56
yoco315:對於編譯器的最佳化也會有負面影響,更別說還有多序跟平行 05/11 01:57
yoco315:處理的問題了 @@~ 05/11 01:57
Ebergies:Singleton 的確就是全域變數, 當時看到還想說 05/11 07:58
Ebergies:靠, 這個也算一個 pattern? 05/11 07:58