我在一篇關於智能指針閱讀Boost創建:Boost中的作用域指針:什麼意思是一個原始指針?
「scoped_ptr的有利於原始指針,而scoped_array是動態數組有用的。」
但我沒有得到他們所說的「生指針」,所以也沒有得到這句話。
難道你們中的任何人都可以向我解釋這個嗎?感謝
我在一篇關於智能指針閱讀Boost創建:Boost中的作用域指針:什麼意思是一個原始指針?
「scoped_ptr的有利於原始指針,而scoped_array是動態數組有用的。」
但我沒有得到他們所說的「生指針」,所以也沒有得到這句話。
難道你們中的任何人都可以向我解釋這個嗎?感謝
原始指針是由語言的語法與*
引入一個指針:
int* ptr;
這是一個正常的POD(在存儲器中的「原始」數字地址)變量,所以它平凡自毀。什麼是重要的,惱人原始指針是:
int* ptr = new int(42);
因爲事實的
ptr
破壞是無操作
,delete
不會被調用,你必須做手工。智能指針環繞原始指針並銷燬指向的對象(必要時這樣做)。
C++ 11以unique_ptr
和shared_ptr
的形式將智能指針引入到標準庫中。在定位C++ 11時,你應該使用那些代替boost代碼的代碼。
數組的提及來自於我們可以將數組表示爲指向第一個元素的指針和一些大小的概念。例如,char*
是指向數組中第一個字符的指針,我們知道它在'\0'
處結束。這種陣列的動態分配由new[]
運算符完成(並且由delete[]
破壞);標準庫中的智能指針也可以處理這些類型,但通常建議使用std::vector
。
他們的措辭是不幸的。通過「原始」指針,人們通常指的是原始指針類型,而不管它們指向什麼。他們的意思是:
scoped_ptr適用於指向單個對象的指針,而scoped_array適用於動態數組