[問題] class內部的static dynamic變數該何時清除

看板C_and_CPP作者 (嘰咕嘰咕嘰咕)時間13年前 (2011/05/10 18:30), 編輯推噓6(6024)
留言30則, 6人參與, 最新討論串1/1
請問一下 如果我的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

05/10 19:21, , 1F
很簡單, 不要用 singleton
05/10 19:21, 1F

05/10 19:22, , 2F
然後 A * const 是型別名稱 ... 你宣告時不就用這個嗎?
05/10 19:22, 2F

05/10 19:22, , 3F
在 C++ 用 singleton 只是自找麻煩
05/10 19:22, 3F

05/10 20:14, , 4F
是因為C++的多執行緒安全很麻煩嗎?
05/10 20:14, 4F

05/10 20:19, , 5F
C++ 用 singleton 的麻煩之處在?
05/10 20:19, 5F

05/10 21:51, , 6F
其中一種看法: http://0rz.tw/3ZCF6
05/10 21:51, 6F

05/10 21:51, , 7F
當然多緒安全在 C++ 特別麻煩也是原因之一
05/10 21:51, 7F

05/10 21:52, , 8F
有趣的是目前我遇到大多數會大量使用 Singleton 的人
05/10 21:52, 8F

05/10 21:53, , 9F
原本都是寫 Java 的,他們的 getInstance 沒有任何mutex
05/10 21:53, 9F

05/10 21:53, , 10F
而且雖然他們同意 global varible 很噁心, 但仍然認為
05/10 21:53, 10F

05/10 21:53, , 11F
Singleton rocks
05/10 21:53, 11F

05/10 22:08, , 12F
推樓上好文:)
05/10 22:08, 12F

05/10 23:05, , 13F
老實說我不覺得這是一個問題。雖然我也曾經想過這類的問
05/10 23:05, 13F

05/10 23:06, , 14F
題,但那僅止於優雅與否的範疇,多的是方法解決這東東
05/10 23:06, 14F

05/10 23:07, , 15F
- 只要不排斥稍微髒一點的做法。
05/10 23:07, 15F

05/10 23:26, , 16F
那個型別宣告真的是自己腦了XD 至於另外只是想問比較常用
05/10 23:26, 16F

05/10 23:27, , 17F
的方法而已
05/10 23:27, 17F

05/11 01:51, , 18F
不要用singleton+1, 老實說, singleton 就是 global var
05/11 01:51, 18F

05/11 01:52, , 19F
令人驚訝的是很多人看到全域變數就想吐,但是覺得單件很好
05/11 01:52, 19F

05/11 01:52, , 20F
這真是很奇怪的現象,單件實際上的意義跟全域變數完全一樣
05/11 01:52, 20F

05/11 01:53, , 21F
我自己不使用singleton最大的原因是程式碼的 testability
05/11 01:53, 21F

05/11 01:54, , 22F
singleton 無法被 dependency injection mock 掉...
05/11 01:54, 22F

05/11 01:55, , 23F
對於 unit test 的撰寫是非常不便的,會導致程式碼的
05/11 01:55, 23F

05/11 01:55, , 24F
可測試性很低,在實質上也跟全域變數一樣會造成bug出現時
05/11 01:55, 24F

05/11 01:56, , 25F
不容易追蹤問題的來源..
05/11 01:56, 25F

05/11 01:56, , 26F
另外 singleton 也違反 pure function 的設計理念
05/11 01:56, 26F

05/11 01:57, , 27F
對於編譯器的最佳化也會有負面影響,更別說還有多序跟平行
05/11 01:57, 27F

05/11 01:57, , 28F
處理的問題了 @@~
05/11 01:57, 28F

05/11 07:58, , 29F
Singleton 的確就是全域變數, 當時看到還想說
05/11 07:58, 29F

05/11 07:58, , 30F
靠, 這個也算一個 pattern?
05/11 07:58, 30F
文章代碼(AID): #1DoHFQI2 (C_and_CPP)