我注意到C++中的allocator爲void類型提供了專門化。有沒有特別的目的來做到這一點?爲void類型分配內存沒有意義,對吧?爲什麼C++中的allocator提供了專門化的類型void
9
A
回答
7
這個老Standard Librarian列由馬特·Austern在一般分配器,包括本珍聞的相當透徹的討論:
我們該怎麼辦關於無效?有時一個容器必須指向void 指針,並且重新綁定機制幾乎給我們提供了我們需要的東西,但是 不完全。它不起作用,因爲我們需要像malloc_allocator :: pointer那樣寫一些 ,並且我們已經定義了 malloc_allocator,以便將它實例化爲void將是 非法。它使用sizeof(T),它是指T &; T無效時均不合法。 解決方案和問題一樣簡單:專門用於 malloc_allocator,用於void,除了我們需要引用空指針所需的最小值外,其餘所有內容都不包含在內。
malloc_allocator是Austern在他的示例中使用的示例實現,但它適用於一般情況。
1
相關問題
- 1. 爲什麼shared_ptr <void>不是專門的?
- 2. C++模板專門化提供額外的成員函數?
- 3. 爲什麼這段代碼爲** std :: hash模板的** ALL **枚舉提供了專門化?
- 4. 爲什麼std :: allocator :: construct和std :: allocator :: destroy在元素類型上模板化?
- 5. 一組類型的模板專門化
- 6. 我如何專門爲一個類的繼承者提供參數類型?
- 7. C++模板類的模板專門化
- 8. 類似地圖類型的C++模板專門化
- 9. 類模板:爲什麼我無法專門針對void類型的單個方法?
- 10. 爲模板專門化提供* implicit *轉換運算符
- 11. 模板類型的C++模板專門化
- 12. 提供專門的初始化一個通用的結構
- 13. Csv類型提供者中的行的類型是什麼?
- 14. 入門在Visual Studio 2010中爲TFS提供的類型資源
- 15. C++模板專門化
- 16. 如何專門化Javascript類?
- 17. 類型推斷到底提供了什麼類?
- 18. 爲什麼不是std :: string是std :: vector的專門化?
- 19. C++中模板類的成員函數的專門化
- 20. 通過參數類型C++專門化重載構造函數
- 21. 用於抽象基類的子類的C++模板專門化
- 22. 爲什麼std :: allocator在C++ 17中失去成員類型/函數?
- 23. 爲什麼明確地專門化泛型函數是不允許的?
- 24. coffeescript專門針對BackboneJS等框架提供了哪些優勢?
- 25. Flexmock django模型對象爲模型對象提供了什麼?
- 26. 覆蓋函數模板專門化中的返回類型
- 27. 無法初始化類型爲'void *'的類型爲'void * const *'的變量
- 28. 爲什麼要使用專門的模板類?
- 29. 如何爲模板類型提供模板功能的專業化?
- 30. C++從專門模板類
如果您發現一個有用的答案,它被認爲是在這個網站上接受它的好形式。 – Gnawme