Допустим, я набрал вектор, который будет использоваться для увеличения общей памяти. При его создании я должен передать аллокатор из manage_shared_memory, что имеет смысл.
Если я хочу использовать тот же тип вектора, но размещать его не в общей памяти, а вместо этого выделять его в стандартном пространстве памяти процесса.
Возможно ли, указав другой распределитель для объекта?
Должен ли я изменить определение моего вектора, чтобы принять обе реализации?
Это невозможно сделать, и поэтому вместо этого я должен использовать другой тип вектора?
Пример кода, который я пытаюсь исправить:
#include <boost/interprocess/managed_shared_memory.hpp>
#include <boost/interprocess/containers/vector.hpp>
#include <boost/interprocess/allocators/allocator.hpp>
using namespace boost::interprocess;
typedef managed_shared_memory::segment_manager SegmentMgr;
typedef allocator<int, SegmentMgr> IntAlloc;
typedef vector<int, IntAlloc> IntVector;
int main()
{
shared_memory_object::remove("Boost");
managed_shared_memory managed_shm{ open_or_create, "Boost", 1024 };
IntAlloc intAlloc = managed_shm.get_segment_manager();
IntVector vectorInSharedMemory({}, intAlloc); // <--- this allocates in shared memory
IntVector vectorInMyOwnPrivateMemorySpace({}, /* ? */); // <--- is there a trick here ?
return 0;
}