什麼是裸指針?
回答
下面是簡單的例子:
#include <memory>
struct X { int a,b,c; };
int main()
{
std::shared_ptr<X> sp(new X);
X* np = new X;
delete np;
}
np
是指向X
類型的對象 - 如果你有動態分配(new
/malloc
)這個對象,你必須delete
/free
它...簡單的指針一樣被稱爲「裸指針」。
sp
是具有指向託管資源,這意味着你可以使用它,就像你會使用np
的對象,但在沒有shared_ptr
對象擁有這種資源,資源被釋放,所以你不要它不得不delete
它。 智能指針照顧內存管理,所以你不必;)
所以裸指針是真正裸露的(即刪除必須強制執行),只有當它是通過新的動態分配的時候 – LivingThing 2012-02-15 19:27:53
@MuhammadSalman:是的,有一個例外:如果你用'a = new int [5];來分配一個數組''你應該像這樣刪除它:'delete [] a;' – LihO 2012-02-15 19:30:43
你應該像分配它們一樣釋放對象,意思是使用'malloc'/'calloc'帶'free','new' w ith'delete'和'new []'用'delete []' – LihO 2012-02-15 19:33:01
一個裸指針(原始指針,「啞」指針)是一個C型指針T*
。與C++提供的「智能」指針(std::shared_ptr<T>
,std::weak_ptr<T>
和std::unique_ptr<T>
)進行對比。
「裸指針」是一個「普通」指針,即標準和C++中任何一本書的指針指針。這是通常的「T *
」(其中T
是指針指向的類型)。
「裸」這個術語來對他們反對智能三分球,這是在許多方面表現爲指針類(通常他們超負荷運營商*
,->
在某些情況下[]
)。
智能指針是「聰明」,因爲他們指定和執行一些所有權的語義,去除裸指針的「啞」:在事實裸指針不指定/知道他們是否自己他們所指的對象(例如,如果在指針超出範圍時它必須被釋放),並且,即使使用某種命名約定,已知如果指向某個指針擁有對象,語言也不會強制執行此操作,因此,如果指針超出範圍和沒有人手動釋放指向的對象(通常這會發生,如果引發異常)您有內存泄漏。
智能指針改爲利用C++類型系統(複製構造函數,賦值運算符,保證調用析構函數,...)的保證來建立和實施某種所有權(通常爲:strict和nontransferable,strict但可以轉移到另一個智能指針,在幾個智能指針之間共享)。
......據說,在StackOverflow和互聯網上有很多關於智能指針的討論,我相信你可以在智能指針上找到更廣泛的討論,以及爲什麼使用裸指針在現代C++程序中,自己的對象通常是壞事TM。
智能指針是C++的首選方式,因爲它們提供更好的內存管理。智能指針具有額外的信息(計數引用數量,當前所有權等)以及它們指向的對象的地址,因此名稱智能指針和裸指針不包含這樣的額外信息,因此名稱裸指針因此他們不會刪除不再使用的對象,因爲他們沒有這樣的信息。 希望它有助於保留在我們的腦海。
- 1. 術語「裸體約束」是指什麼?
- 2. 什麼是指向指針的指針?
- 3. 什麼是強指針和弱指針
- 4. 指針指針的意義是什麼?
- 5. 指針指針是什麼意思?
- 6. 指針指針的語法是什麼?
- 7. 裸指針有多糟?
- 8. C++裸指針範圍
- 9. 什麼是懸掛指針
- 10. 什麼是函數指針?
- 11. 什麼是指針聲明?
- 12. 什麼是指針攪拌?
- 13. 什麼是參考指針?
- 14. 什麼是合成指針?
- 15. 什麼是'裸條條款'
- 16. 在C和C++中,const指針指針指的是什麼?
- 17. 爲什麼指向char的指針指針是最新的?
- 18. 爲什麼指向指針?
- 19. 爲什麼cudaMalloc()使用指針指針?
- 20. 爲什麼methodLists是objc_class中指針的指針
- 21. 指針指針的作用是什麼? char **
- 22. 文件指針或流指針背後的概念是什麼?
- 23. 爲什麼和什麼時候值得使用指針指針?
- 24. 引用雙指針的值是什麼?
- 25. 什麼是文件指針模式?
- 26. 什麼是指針存儲在c
- 27. 消耗指針是什麼意思?
- 28. 爲什麼Java不是使用指針
- 29. 共享指針的處理是什麼?
- 30. 類指針*的含義是什麼?
一個真正的指針,而不是一個智能指針。 – ildjarn 2012-02-15 19:00:38
@ildjarn,什麼是智能指針? :) – 2012-02-15 19:01:29
@NickDandoulakis看到talnicolas的評論 – 2012-02-15 19:02:54