C++ åèæå
- C++11
- C++14
- C++17
- C++20
- C++ ç¼è¯å¨æ¯ææ åµè¡¨
- ç¬ç«ä¸å®¿ä¸»å®ç°
- C++ è¯è¨
- C++ å ³é®è¯
- é¢å¤çå¨
- C++ æ ååºå¤´æä»¶
- å ·åè¦æ±
- åè½ç¹æ§æµè¯ (C++20)
- å·¥å ·åº
- ç±»åæ¯æï¼åºæ¬ç±»åãRTTIãç±»åç¹æ§ï¼
- æ¦å¿µåº (C++20)
- é误å¤ç
- 卿å å管ç
- std::unique_ptr
- std::scoped_allocator_adaptor
- operator==,!=(std::scoped_allocator_adaptor)
- std::scoped_allocator_adaptor çæ¨å¯¼æå¼
- std::scoped_allocator_adaptor<OuterAlloc,InnerAlloc...>::destroy
- std::scoped_allocator_adaptor<OuterAlloc,InnerAlloc...>:: select_on_container_copy_construction
- std::scoped_allocator_adaptor<OuterAlloc,InnerAlloc...>::allocate
- std::scoped_allocator_adaptor<OuterAlloc,InnerAlloc...>::inner_allocator
- std::scoped_allocator_adaptor<OuterAlloc,InnerAlloc...>::outer_allocator
- std::scoped_allocator_adaptor<OuterAlloc,InnerAlloc...>:: scoped_allocator_adaptor
- std::scoped_allocator_adaptor<OuterAlloc,InnerAlloc...>:: ~scoped_allocator_adaptor
- std::scoped_allocator_adaptor<OuterAlloc,InnerAlloc...>::operator=
- std::scoped_allocator_adaptor<OuterAlloc,InnerAlloc...>::deallocate
- std::scoped_allocator_adaptor<OuterAlloc,InnerAlloc...>::max_size
- std::scoped_allocator_adaptor<OuterAlloc,InnerAlloc...>::construct
- std::addressof
- std::allocator_traits
- std::default_delete
- std::allocator_arg_t
- std::allocator_arg
- std::weak_ptr
- std::enable_shared_from_this
- std::bad_weak_ptr
- std::auto_ptr
- std::destroy_at
- std::destroy
- std::destroy_n
- std::uninitialized_move
- std::uninitialized_value_construct
- std::owner_less
- std::shared_ptr
- std::to_address
- std::assume_aligned
- std::make_obj_using_allocator
- C å å管çåº
- ä½å±å å管ç
- std::pmr::memory_resource
- std::allocator
- std::pointer_traits
- std::uses_allocator
- std::uses_allocator_construction_args
- std::uninitialized_construct_using_allocator
- std::pmr::polymorphic_allocator
- std::pmr::get_default_resource
- std::pmr::set_default_resource
- std::pmr::new_delete_resource
- std::pmr::null_memory_resource
- std::pmr::synchronized_pool_resource
- std::pmr::unsynchronized_pool_resource
- std::pmr::monotonic_buffer_resource
- std::pmr::pool_options
- std::raw_storage_iterator
- std::get_temporary_buffer
- std::return_temporary_buffer
- std::uninitialized_copy
- std::uninitialized_fill
- std::uninitialized_default_construct
- std::uninitialized_copy_n
- std::uninitialized_fill_n
- std::uninitialized_move_n
- std::uninitialized_default_construct_n
- std::uninitialized_value_construct_n
- std::construct_at
- std::align
- 注é
- æ¥æåæ¶é´å·¥å ·
- å符串åº
- 容å¨åº
- è¿ä»£å¨åº
- èå´åº (C++20)
- ç®æ³åº
- æ°å¼åº
- è¾å ¥/è¾åºåº
- æä»¶ç³»ç»åº
- æ¬å°ååº
- æ£å表达å¼åº
- ååæä½åº
- çº¿ç¨æ¯æåº
- å®éªæ§ C++ ç¹æ§
- æç¨çèµæº
- ç´¢å¼
- std 符å·ç´¢å¼
- åç¨æ¯æ (C++20)
- C++ å ³é®è¯
ä½ç½®ï¼é¦é¡µ > C++ åèæå >卿å å管ç > std::scoped_allocator_adaptor
std::scoped_allocator_adaptor
| å®ä¹äºå¤´æä»¶ <scoped_allocator>
|
||
| template< class OuterAlloc, class... InnerAlloc > class scoped_allocator_adaptor : public OuterAlloc; |
(C++11 èµ·) | |
std::scoped_allocator_adaptor ç±»æ¨¡æ¿æ¯å¯ç¨äºå¤å±å®¹å¨ï¼ map ç list ç set ç vector ççï¼çåé
å¨ãå®ä»¥å¤å±åé
å¨ç±»å OuterAlloc ä¸é¶ææ´å¤ä¸ªå
å±åé
å¨ç±»å InnerAlloc... å®ä¾åãç´æ¥ä»¥ scoped_allocator_adaptor æé ç容å¨ç¨ OuterAlloc åé
å
¶å
ç´ ï¼ä½è¥å
ç´ èªèº«æ¯å®¹å¨ï¼åå®ä½¿ç¨é¦ä¸ªå
ååé
å¨ã该容å¨çå
ç´ ï¼è¥å
¶èªèº«æ¯å®¹å¨ï¼å使ç¨ç¬¬äºä¸ªå
ååé
å¨ï¼ä»¥æ¤ç±»æ¨ãè¥å®¹å¨çå±çº§å¤äºå
å±åé
å¨çæ°éï¼åæå
å±åé
å¨ä¸ºææè¿ä¸æ¥å
åµç容å¨å度使ç¨ã
æ¤éé å¨çç®çæ¯å¨å åµå®¹å¨ä¸æ£ç¡®åå§åæç¶æåé å¨ï¼ä¾å¦å¨ææå±æ¬¡çåµå¥å®¹å¨é½å¿ 须置äºåä¸å ±äº«å åæ®µæ¶ãéé å¨çæé 彿°æ¥æ¶åè¡¨ä¸ææåé å¨çåæ°ï¼èæ¯ä¸ªå åµå®¹å¨ä»éé 卿éè·å¾å ¶åé å¨çç¶æã
ä¸ºäº scoped_allocator_adaptor çç®çï¼è¥ä¸ä¸ªå
å±åé
卿¯ A ï¼å任使»¡è¶³ std::uses_allocator<T,A>::value == true çç±» T åä¸éå½ï¼å¦å宿¯å®¹å¨ï¼å¦å¤ï¼ std::pair 被å½åè¿ç§å®¹å¨ï¼éè¿ scoped_allocator_adaptor::construct çæå®éè½½ã
å
¸åå®ç°ä¿æä¸ä¸ª std::scoped_allocator_adaptor<InnerAllocs...> ä½ä¸ºæå对象ã
æåç±»å
| Â | |
| ç±»å | å®ä¹ |
outer_allocator_type
|
OuterAlloc |
inner_allocator_type
|
scoped_allocator_adaptor<InnerAllocs...> ï¼æè¥ sizeof...(InnerAllocs) == 0 å为 scoped_allocator_adaptor<OuterAlloc> |
value_type
|
std::allocator_traits<OuterAlloc>::value_type |
size_type
|
std::allocator_traits<OuterAlloc>::size_type |
difference_type
|
std::allocator_traits<OuterAlloc>::difference_type |
pointer
|
std::allocator_traits<OuterAlloc>::pointer |
const_pointer
|
std::allocator_traits<OuterAlloc>::const_pointer |
void_pointer
|
std::allocator_traits<OuterAlloc>::void_pointer |
const_void_pointer
|
std::allocator_traits<OuterAlloc>::const_void_pointer |
propagate_on_container_copy_assignment
| |
propagate_on_container_move_assignment
| |
propagate_on_container_swap
| |
is_always_equal(C++17)
| |
rebind
| |
æå彿°
| å建æ°ç scoped_allocator_adaptor å®ä¾ (å ¬å¼æå彿°) | |
| ææ scoped_allocator_adaptor å®ä¾ (å ¬å¼æå彿°) | |
èµå¼ä¸ä¸ª scoped_allocator_adaptor (å ¬å¼æå彿°) | |
è·å¾ä¸ä¸ª inner_allocator å¼ç¨ (å ¬å¼æå彿°) | |
è·å¾ä¸ä¸ª outer_allocator å¼ç¨ (å ¬å¼æå彿°) | |
| ç¨å¤å±åé
å¨åé
æªåå§ååå¨ (å ¬å¼æå彿°) | |
| ç¨å¤å±åé
å¨è§£åé
åå¨ (å ¬å¼æå彿°) | |
| è¿åå¤å±åé
å¨ææ¯æçæå¤§åé
å¤§å° (å ¬å¼æå彿°) | |
| å¨åé
çåå¨ä¸æé ä¸ä¸ªå¯¹è±¡ï¼è¥éååä¼ éå
ååé
å¨è³å
¶æé 彿° (å ¬å¼æå彿°) | |
| ææå¤äºåé
çåå¨ç对象 (å ¬å¼æå彿°) | |
| å¤å¶ scoped_allocator_adaptor ä¸å
¶ææåé
å¨çç¶æ (å ¬å¼æå彿°) |
éæå彿°
| (C++20 ä¸ç§»é¤) |
æ¯è¾ä¸¤ä¸ª scoped_allocator_adaptor å®ä¾ (å ¬å¼æå彿°) |
æ¨å¯¼æå¼(C++17 èµ·)
示ä¾
#include <vector> #include <scoped_allocator> #include <boost/interprocess/managed_shared_memory.hpp> #include <boost/interprocess/allocators/adaptive_pool.hpp> namespace bi = boost::interprocess; template<class T> using alloc = bi::adaptive_pool<T, bi::managed_shared_memory::segment_manager>; using ipc_row = std::vector<int, alloc<int>>; using ipc_matrix = std::vector<ipc_row, std::scoped_allocator_adaptor<alloc<ipc_row>>>; int main () { bi::managed_shared_memory s(bi::create_only, "Demo", 65536);  // å¨å ±äº«å åä¸å建 vector ç vector ipc_matrix v(s.get_segment_manager());  // å¯¹äºææè¿äºéå 项ï¼å å± vector ä»å¤å± vector ç scoped_allocator_adaptor // è·å¾å ¶åé å¨åæ° v.resize(1); v[0].push_back(1); v.emplace_back(2); std::vector<int> local_row = {1,2,3}; v.emplace_back(local_row.begin(), local_row.end());  bi::shared_memory_object::remove("Demo"); }
åé
| (C++11) |
æä¾å
³äºåé
å¨ç±»åçä¿¡æ¯ (类模æ¿) |
| (C++11) |
æ£æ¥æå®çç±»åæ¯å¦æ¯æä½¿ç¨åé
å¨çæé (类模æ¿) |
| é»è®¤çåé
å¨ (类模æ¿) |