回答
首先,智能指針幫助您:當拋出異常
- ,防止泄漏。當拋出一個異常時,你不希望在try塊中早些分配的任何對象被泄漏。通過將它們包裝在智能指針中,當try塊被退出時它們將被銷燬,這些對象將被正確銷燬。
- 通過對所有者進行對象引用來管理生命週期(即,最後一個銷燬引用特定對象的智能指針實際上釋放對象)。這在鬆散耦合的場景中特別有用,因爲對象的用戶彼此不知道對象何時應該銷燬,因此不清楚該對象何時應該銷燬。
,其中智能指針是有用的一個很好的例子:
指針的對象的載體。通過 使其成爲共享指針的向量,例如, ,當 向量被銷燬和/或對象被移除時,將自動釋放對象 。這使對象生命週期管理自動化,並幫助容器的用戶避免內存泄漏。
智能指針是一個爲它所指向的對象動態分配內存的對象,當智能指針超出範圍時,它會自動爲它所指向的對象釋放內存。當你想要某些在超出範圍時被釋放的東西時很有用,但是這太大而不能放在堆棧上(或者有其他問題阻止它被放到堆棧上)。
我不確定智能指針是否必須負責分配內存。 – Nick 2011-02-15 15:13:24
智能指針本質上是管理在堆上分配的對象上分配的內存。
因爲在堆棧上分配的對象具有固定的生命週期(即在它們聲明的範圍內),釋放堆內存是確定性的並且保證發生。
從升壓智能指針(smart_ptr)LIB摘錄:
智能指針是存儲 指針動態分配 (堆)的對象的對象。它們的行爲很像0內置的C++指針,只不過它們會自動刪除在適當的時間點指向的對象 。 智能指針在異常情況下特別有用 ,因爲它們確保正確銷燬動態分配的對象。他們 也可以用來跟蹤 動態分配的對象共享 由多個所有者。
在概念上,智能指針被看作 作爲擁有指向的對象,並且因此 負責該 對象的刪除時不再需要它。
智能指針通過跟蹤有多少引用指向內存來處理它們自己的內存管理。一旦有0個引用,它就會爲你刪除內存。使內存管理更容易。
智能指針泛指泛指類似於指針的類。您可以使用該類來存儲指向您分配的內存的指針,並通過指針訪問數據。
優點是,當在函數和方法中使用時,智能指針可以在變量超出範圍後自動釋放內存。否則,當函數釋放所有分配的內存時,這是內存泄漏的主要機會。
例如,檢查出http://msdn.microsoft.com/en-us/library/txda4x5t(VS.80).aspx。
智能指針基本上是執行類似於指針 的函數的對象,它們用於減少分配和釋放時間。對於C++來說,一個常見的例子是auto_ptr
- 1. 有人可以解釋這個函數指針語法嗎?
- 2. 有人可以解釋C指針
- 3. 有人解釋DSL語言創建的機制「簡單英語」
- 4. 有人可以用簡單的英語解釋這個簡短的getopts bash腳本嗎? (UNIX)
- 5. 任何人都可以用英語向我解釋這個嗎?
- 6. 有人可以用英文解釋下面的代碼嗎?
- 7. 有人可以解釋嗎?
- 8. 有人可以用簡單的英語解釋ConfigurationSection和ConfigurationElement之間的區別嗎?
- 9. 有人可以用普通英語解釋Twitter API的速率限制嗎?
- 10. 有人可以用英文解釋這個VBA宏代碼嗎?
- 11. 有人可以爲我簡單地解釋MVC嗎?
- 12. 有人可以簡單地解釋這個Java行嗎?
- 13. 有人可以解釋「解除空指針的警告」警告
- 14. 有人可以向我解釋此MSDN代碼的英文嗎?
- 15. 在Windows終端的Ubuntu?任何人都可以用簡單的英語爲我解釋'col'命令嗎?
- 16. 有人可以用簡單的語言解釋一下javascript的數據綁定功能嗎?
- 17. 有人可以解釋iOS4的CMTime嗎?
- 18. 簡單的升壓智能指針語法問題
- 19. char數組和指針 - 有人可以解釋下面的輸出嗎?
- 20. 有人可以解釋純英語的ORA-29861錯誤及其可能的原因嗎?
- 21. 有人可以解釋這個通用語法嗎?
- 22. 解釋在簡單的英語語言使用高階函數
- 23. 有人可以解釋這個任務,雙指針和輸出
- 24. 有人可以解釋respond_to嗎? :每?
- 25. 有人可以解釋參數autovacuum_naptime嗎?
- 26. 有人可以解釋行結束嗎?
- 27. 有人可以解釋ContactsContracts嗎?
- 28. 有人可以解釋iFrames嗎?
- 29. 有人可以解釋WebKit嗎?
- 30. 有人可以解釋這一點嗎?
就像在boost智能指針一樣? http://www.boost.org/doc/libs/1_45_0/libs/smart_ptr/smart_ptr.htm – mkb 2011-02-15 14:57:49
我希望我們能夠假設對「常規」指針的認識和理解? – delnan 2011-02-15 15:01:48
delnan,是:) ___ – VextoR 2011-02-15 15:05:41