2011-02-15 33 views
7

今天有人問我關於C++的智能指針,我無法找到關於它的有用的信息..有人可以用簡單的英語解釋智能指針嗎?

請,可有人告訴: 什麼是智能指針? 你什麼時候需要它? 智能指針實際上有用嗎?

謝謝!

+0

就像在boost智能指針一樣? http://www.boost.org/doc/libs/1_45_0/libs/smart_ptr/smart_ptr.htm – mkb 2011-02-15 14:57:49

+0

我希望我們能夠假設對「常規」指針的認識和理解? – delnan 2011-02-15 15:01:48

+0

delnan,是:) ___ – VextoR 2011-02-15 15:05:41

回答

6

首先,智能指針幫助您:當拋出異常

  • ,防止泄漏。當拋出一個異常時,你不希望在try塊中早些分配的任何對象被泄漏。通過將它們包裝在智能指針中,當try塊被退出時它們將被銷燬,這些對象將被正確銷燬。
  • 通過對所有者進行對象引用來管理生命週期(即,最後一個銷燬引用特定對象的智能指針實際上釋放對象)。這在鬆散耦合的場景中特別有用,因爲對象的用戶彼此不知道對象何時應該銷燬,因此不清楚該對象何時應該銷燬。

,其中智能指針是有用的一個很好的例子:

指針的對象的載體。通過 使其成爲共享指針的向量,例如, ,當 向量被銷燬和/或對象被移除時,將自動釋放對象 。這使對象生命週期管理自動化,並幫助容器的用戶避免內存泄漏。

0

智能指針是一個爲它所指向的對象動態分配內存的對象,當智能指針超出範圍時,它會自動爲它所指向的對象釋放內存。當你想要某些在超出範圍時被釋放的東西時很有用,但是這太大而不能放在堆棧上(或者有其他問題阻止它被放到堆棧上)。

+0

我不確定智能指針是否必須負責分配內存。 – Nick 2011-02-15 15:13:24

0

智能指針本質上是管理在堆上分配的對象上分配的內存。

因爲在堆棧上分配的對象具有固定的生命週期(即在它們聲明的範圍內),釋放堆內存是確定性的並且保證發生。

3

從升壓智能指針(smart_ptr)LIB摘錄:

智能指針是存儲 指針動態分配 (堆)的對象的對象。它們的行爲很像0​​內置的C++指針,只不過它們會自動刪除在適當的時間點指向的對象 。 智能指針在異常情況下特別有用 ,因爲它們確保正確銷燬動態分配的對象。他們 也可以用來跟蹤 動態分配的對象共享 由多個所有者。

在概念上,智能指針被看作 作爲擁有指向的對象,並且因此 負責該 對象的刪除時不再需要它。

1

智能指針通過跟蹤有多少引用指向內存來處理它們自己的內存管理。一旦有0個引用,它就會爲你刪除內存。使內存管理更容易。

1

智能指針泛指泛指類似於指針的類。您可以使用該類來存儲指向您分配的內存的指針,並通過指針訪問數據。

優點是,當在函數和方法中使用時,智能指針可以在變量超出範圍後自動釋放內存。否則,當函數釋放所有分配的內存時,這是內存泄漏的主要機會。

例如,檢查出http://msdn.microsoft.com/en-us/library/txda4x5t(VS.80).aspx

0

智能指針基本上是執行類似於指針 的函數的對象,它們用於減少分配和釋放時間。對於C++來說,一個常見的例子是auto_ptr

相關問題