智能指針「第16項:使用相同的形式和new
相應用途delete
」斯科特邁爾斯有效的C++,你不應該把動態的auto_ptr
(或tr1::shared_ptr
)分配數組因爲delete p
而不是delete[] p
被銷燬(另請參閱answers)。但是,這仍然適用於C++ 11 <和更多,特別是std::shared_ptr
和std::unique_ptr
,因爲我注意到在一些開源代碼中使用了std::unique_ptr<uint8_t[]>
?如果後者是正確的,那麼如何區分new
和new []
分配的數據?使用在C++基於動態分配數組
回答
std::unique_ptr
專門用於C++ 11中的數組類型,因爲它不適用於std::shared_ptr
。所以std::unique_ptr<uint8_t[]>
將會呼叫delete []
,但std::shared_ptr<uint8_t[]>
默認會調用delete
。
儘管在C++ 17中,此行爲已更改。在C++ 17中std::shared_ptr
已經專門用於陣列類型,使用std::shared_ptr<uint8_t[]>
將會調用delete []
。
`
後者是正確的,unique_ptr
與陣列工作正常。它具有調用delete[]
的數組類型的模板專門化。不過,Scott Meyers在他的Effective Modern C++中建議使用std::array
或std::vector
而不是數組上的智能指針。
他還建議使用'boost :: scoped_array'和'boost :: shared_array';)Can你提供了一個指向數組類型的模板專門化的鏈接? – Matthias
@Matthias查看Richard Critten的評論,他提供了cppreference的鏈接。模板實例化在您的libstdC++代碼中。 –
- 1. 動態數組分配C++
- 2. 動態數組分配在C++問題
- 3. 如何在C++中使用「new」動態分配向量數組?
- 4. 使用指針動態分配數組
- 5. 刪除動態分配的數組C++
- 6. C中的動態數組分配
- 7. 分配結構指針分配/釋放動態數組用C
- 8. 使用基於動態/狀態的分配器的STL實現?
- 9. 基本的C++動態分配問題
- 10. 動態分配數組
- 11. 動態分配3D數組
- 12. 動態分配數組
- 13. ifstream動態分配數組
- 14. C++動態分配二維數組過度分配內存?
- 15. C:靜態到動態分配在多個維數組
- 16. C中動態分配數組的數組元素數
- 17. 用於數組的C++內存分配
- 18. 動態分配在c + +
- 19. 動態分配C
- 20. 動態分配,C
- 21. 動態內存分配和使用C
- 22. 如何動態分配2維數組用於特定目的?
- 23. Ada用於初始化動態分配數組的語法
- 24. 在類存儲結構中使用動態分配的數組
- 25. 數據庫創建使用動態內存分配使用C
- 26. 分配給動態數組時,內存是否在C++中分配?
- 27. 動態分配的數組與用戶輸入C++
- 28. 動態分配的指針數組結構用C
- 29. 獲取動態分配的數組的長度用C
- 30. 如何在C++中動態分配連續的二維數組?
使用'std :: vector'作爲數組(可能不是'bool',依賴)。它是C++中標準動態大小的數組。 –
請參閱http://en.cppreference.com/w/cpp/memory/unique_ptr並查看點(2),它是註釋 –