我想實現一個向量,並且我已經讀過最好的實現使用分配器類(內存頭文件)。我不知道它是什麼,網站cplusplus.com根本沒有幫助我。什麼是分配器<T>
回答
這是一個內存管理的抽象概念。
在C編程中,您基本上使用函數malloc()
和free()
來分配內存塊,而無需知道如何分配塊。在C++中,函數是operator new()
和operator delete()
。
std::allocator
是一個模板,取一個類型參數,它是要分配的對象的類型。 std::allocator
的實例化在內部使用operator new()
和operator delete()
,但std::allocator<T>
具有關於什麼是T
的信息意味着它知道如何構造和銷燬對象。
的std::allocator<T>
四個基本功能是:
allocate(size_type n)
用途
operator new()
爲n * sizeof (T)
字節分配空間。請注意,分配的對象都不構成任何對象;不同於new T()
,這兩個對象分配一個空間T
對象和調用無參數構造函數,allocate(size_type n)
只分配空間給n
T
對象。您需要使用construct()
來顯式構造每一個。deallocate(pointer p, size_type n)
用途
operator delete()
以釋放先前調用allocate()
返回的內存。請注意,deallocate()
只能釋放空間。您必須在每個n
T
對象上明確地調用destroy()
,否則您可能會泄漏內存。construct(pointer p, const T& val)
呼籲位於
p
的T
對象T
拷貝構造函數。destroy(pointer p)
調用位於
p
的T
對象的析構函數T
。
非常感謝! – 2012-04-18 15:17:34
+1,閱讀了一些關於'std :: allocator'的文章和SO答案,但這是我第一次理解它。謝謝 :) – 2016-01-08 16:20:04
它是執行標準庫容器類的內存管理的類。
但是,如果您想提供自己的內存管理,您可以這樣做,std::allocator
提供了默認的內存管理。
它執行'默認'內存管理。 – Nick 2012-04-18 14:34:23
是的,但它如何用於矢量實現? – 2012-04-18 14:37:59
@RondogiannisAristophanes:依賴於實現,作爲容器的用戶,不需要知道。 – 2012-04-18 14:39:22
- 1. Xcode - 什麼是分配大小在分配儀器
- 2. 什麼分配器在STL
- 3. 什麼是重新分配?
- 4. 什麼是臨時分配?
- 5. 分配「heapshots」中的<non-object>是什麼意思?
- 6. 什麼是適配器?
- 7. 什麼是Atypon適配器?
- 8. 什麼是<NS0:什麼?
- 9. Weka是什麼分類器?
- 10. 什麼是<#= #>
- 11. 什麼是<%= ... %>
- 12. 容器<ImplementerOfIInterface>不是容器<IInterface>。爲什麼不?
- 13. 爲什麼分配
- 14. 什麼是PHP中的「<<< SQL」?
- 15. Php <<<是什麼意思?
- 16. 什麼是Swift上的+++和<<<?
- 17. 什麼是內核部分不匹配?
- 18. 什麼方法是分配給
- 19. 什麼是對齊的內存分配?
- 20. C分配了指針?這是什麼?
- 21. 什麼是[完整GC(分配失敗)
- 22. 爲什麼分配是錯誤的?
- 23. 爲什麼這個C++ STL分配器沒有分配?
- 24. 什麼是在PHP分配錯誤「分配」的具體細節
- 25. 什麼是MapR分配中使用的容器體系結構?
- 26. GCC用於STL的默認分配器是什麼?
- 27. iPhone:Xcode,樂器,內存分配。什麼是合理的?
- 28. Emacs中緩衝區的重定位分配器是什麼?
- 29. 如何複製紅黑樹,其分配器應該是什麼
- 30. 什麼是<Type>叫什麼?
['std :: allocator'](http://en.cppreference.com/w/cpp/memory/allocator) – Praetorian 2012-04-18 14:33:04