2013-08-07 54 views

回答

1

原始指針是由語言的語法與*引入一個指針:

int* ptr; 

這是一個正常的POD(在存儲器中的「原始」數字地址)變量,所以它平凡自毀。什麼是重要的,惱人原始指針是:

int* ptr = new int(42); 
因爲事實的 ptr破壞是無操作

delete不會被調用,你必須做手工。智能指針環繞原始指針並銷燬指向的對象(必要時這樣做)。

C++ 11以unique_ptrshared_ptr的形式將智能指針引入到標準庫中。在定位C++ 11時,你應該使用那些代替boost代碼的代碼。

數組的提及來自於我們可以將數組表示爲指向第一個元素的指針和一些大小的概念。例如,char*是指向數組中第一個字符的指針,我們知道它在'\0'處結束。這種陣列的動態分配由new[]運算符完成(並且由delete[]破壞);標準庫中的智能指針也可以處理這些類型,但通常建議使用std::vector

2

他們的措辭是不幸的。通過「原始」指針,人們通常指的是原始指針類型,而不管它們指向什麼。他們的意思是:

scoped_ptr適用於指向單個對象的指針,而scoped_array適用於動態數組

相關問題