C 中的默認std::allocator類是無狀態的。這意味著 an 的任何實體都std::allocator可以釋放另一個實體分配的記憶體std::allocator。那么使用分配器實體來分配記憶體有什么意義呢?
例如,為什么這樣分配記憶體:
allocator<T> alloc, alloc2;
T* buffer = alloc.allocate(42);
alloc2.deallocate(buffer);
當功能可以輕松完成相同的作業時:
T* buffer = allocate(42);
deallocate(buffer);
uj5u.com熱心網友回復:
默認分配器是無狀態的,但其他分配器可能不是。但是,所有分配器都應共享相同的介面。
您不應該std::allocator像示例中那樣直接使用。您可以只使用newanddelete進行直接分配/解除分配。
您std::allocator間接使用通用分配器感知型別,例如容器,這些型別應該不知道它們使用的記憶體是如何被包覆的。它們通常具有滿足分配器要求/介面的分配器型別的模板引數,并且std::allocator通常是此模板引數的默認引數。
即使在這些情況下,您也應該通過 來使用分配器std::allocator_traits,而不是直接呼叫分配器型別的成員函式,因為它們中的許多都是通過std::allocator_traits.
uj5u.com熱心網友回復:
?C 中的默認
allocator類是無狀態的。這意味著分配器的任何實體都可以釋放由另一個分配器實體分配的記憶體。
不,這意味著任何實體都std::allocator可以釋放由另一個實體分配的記憶體std::allocator。
這并沒有說明任何A符合分配器規則的型別。std::allocator是無國籍的;一般分配器不必是。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/537126.html
標籤:C 分配器
