智能指針「第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中的動態數組分配
- 4. 使用基於動態/狀態的分配器的STL實現?
- 5. 動態分配數組
- 6. ifstream動態分配數組
- 7. 動態分配3D數組
- 8. C:靜態到動態分配在多個維數組
- 9. C中動態分配數組的數組元素數
- 10. 動態分配在c + +
- 11. 動態分配C
- 12. 動態內存分配和使用C
- 13. Ada用於初始化動態分配數組的語法
- 14. 如何動態分配2維數組用於特定目的?
- 15. 在類存儲結構中使用動態分配的數組
- 16. 如何在c#中使用動態分配製作類對象的數組?
- 17. 數據庫創建使用動態內存分配使用C
- 18. 動態分配的指針數組結構用C
- 19. 獲取動態分配的數組的長度用C
- 20. 在C++源文件之間共享動態分配的數組
- 21. 如何在C中創建多維動態分配數組?
- 22. 結構數組中的動態分配內存(在C中)
- 23. 如何在C++中刪除非動態分配的數組?
- 24. 動態分配的數組如何在C++中被釋放?
- 25. 如何在C中動態分配名稱數組?
- 26. 如何在Qt C++中爲數組動態分配內存?
- 27. 如何在ANSI C中動態分配POINTERS的二維數組?
- 28. 基於輸入的動態excel數組
- 29. 基於數組的動態偵聽器
- 30. C&C++中數組的動態內存分配
使用'std :: vector'作爲數組(可能不是'bool',依賴)。它是C++中標準動態大小的數組。 –
請參閱http://en.cppreference.com/w/cpp/memory/unique_ptr並查看點(2),它是註釋 –