получил поддержку распределителя состояний в 2013 году, для выпуска 4.9.0.

час вхожу в общую память, используяboost::interprocess.

Я определил несколькоstd::unordered_map а такжеstd::unordered_set типы как в следующем порядке:

#include <boost/interprocess/allocators/allocator.hpp>

#include <unordered_map> // NOT the boost implementation ...

...

namespace ipc = boost::interprocess;

 /**
 * allocator type needed to construct maps in shared memory
 */
typedef ipc::allocator<std::pair<const size_t, std::string>,
           ipc::managed_shared_memory::segment_manager> OBJ_MAP_ALLOCATOR;

/**
 * map type to construct maps in shared memory
 */
typedef std::unordered_map<size_t,
               std::string,
               std::hash<size_t>,
               std::equal_to<size_t>,
               OBJ_MAP_ALLOCATOR> OBJ_MAP_TYPE;

Я инициализировал их так:

ipc::managed_shared_memory segment;

// allocate segment etc ... 

OBJ_MAP_ALLOCATOR alloc_inst(segment.get_segment_manager());
objMap = segment.find_or_construct<OBJ_MAP_TYPE> (ipc::unique_instance)(alloc_inst);

Это, кажется, работает нормально, я не нашел никаких проблем во время компиляции или во время выполнения (работа на MacOS,Apple LLVM version 9.1.0 (clang-902.0.39.1), со стандартом C ++ 14).

В документации Boost упоминаются только контейнеры Boost или реализации, специфичные для разных процессов. К сожалению, они не содержат неупорядоченных версий.

Итак, мне интересно, есть ли что-то проблематичное в использовании контейнеров STL по умолчанию с распределителями Boost? Может быть, на другой платформе?

Любая подсказка приветствуется!

Обновить:

Мне было интересно, работает ли он в другой среде, поэтому я написал минимальный пример на Coliru (который удивительно работает сstd::string):

http://coliru.stacked-crooked.com/a/91d1a143778cf3e9

Ответы на вопрос(1)

Ваш ответ на вопрос