將類的構造函數設爲private並具有返回新實例的getInstance方法有什麼作用?你什麼時候只想允許動態創建對象,爲什麼?我見過這樣的例子,我不明白爲什麼。爲什麼在C++中禁止靜態分配?
0
A
回答
0
最明顯的例子是如果班級管理自己的一生。允許靜態分配會導致雙倍空閒。
1
這是通常在類實例管理自己的生命週期時完成的,例如,他們會訂閱一些異步的事件。如果實例在事件到達之前被銷燬,則事件調度程序將使用一個野指針並導致未定義的行爲。
0
通常是因爲程序員想要隨時控制活着的對象。有效的使用情況是:
Singleton模式
保持所有的隱含對象列表活着,以促進所有這些對象的操作
重用那些已經活着對象
最後一個目標通常也需要引用計數,以便能夠在不需要任何東西時銷燬對象更多,並要求對象在邏輯上不變。這樣做的一個用法是實現字符串的性能(它允許字符串通過比較它們的指針進行比較!)。
0
一個原因可能是您希望將創建的特定類型控制爲調用應用程序不需要知道的幾種可能子類型之一。
例如,您可能想獲得一個Connection
下載從URL
資源和URL
將確定哪些Connection
特定類型的返回 - HTTPConnection
,HTTPSConnection
,FTPConection
等等
相關問題
- 1. 在C++中顯式禁止堆分配
- 2. 爲什麼靜態變量檢查爲零然後分配?
- 3. C#靜態類爲什麼使用?
- 4. C++靜態庫太大了,爲什麼?
- 5. 在Objective-C中使用靜態內存分配的最佳實踐是什麼?
- 6. 爲什麼分配給靜態變量的sqlliteconnection被處置?
- 7. 爲什麼不能將靜態類變量分配給堆棧?
- 8. 爲什麼C#靜態類包含非靜態類/結構體?
- 9. 爲什麼在D中使用靜態?
- 10. 爲什麼在PHP 5中靜態...例
- 11. C++ 0x:爲什麼禁止在「operator []」中使用「braced-init-list」?
- 12. 如何在C++中靜態初始化靜態動態分配的數組?
- 13. C++這個數組的靜態和動態分配有什麼區別?
- 14. 什麼是C#中的「靜態方法」?
- 15. 什麼是 「靜態」 在C平均`
- 16. 爲什麼靜態變量需要在C++中聲明兩次
- 17. 爲什麼類的靜態成員不能在C++中重載?
- 18. 爲什麼P/Invoke函數在C#中是靜態的?
- 19. 爲什麼在C++靜態DLL鏈接中使用LIB?
- 20. 靜態類分配
- 21. 如何爲C++中的靜態n維數組分配內存
- 22. C++模板,靜態分配的數組
- 23. 靜態C字符串分配問題
- 24. 非靜態類實例中的c#靜態變量的行爲是什麼?
- 25. C/C++動態或靜態內存分配?用C
- 26. 爲什麼在不安全的部分禁止等待?
- 27. 爲什麼分配
- 28. 爲什麼Java中沒有靜態類
- 29. 爲什麼靜態需要在這裏
- 30. 這些錯誤是什麼意思? ISOC++禁止分配數組
例如,一類使用[shared_from_this](http://en.cppreference.com/w/cpp/memory/enable_shared_from_this/shared_from_this)創建異步完成處理程序要求以特定方式創建類實例。 – 2015-03-31 18:24:17
@DavidSchwartz:的確如此。引用計數和私有構造函數/析構函數經常在一起發現。 – 2015-03-31 18:25:34