Create a shared-memory vector of strings

前端 未结 3 1645
我寻月下人不归
我寻月下人不归 2020-12-16 03:23

I am trying to create a class managing a shared-memory vector of (std)strings.

typedef boost::interprocess::allocator

        
3条回答
  •  生来不讨喜
    2020-12-16 03:54

    From the docs.

    #include 
    #include 
    #include 
    #include 
    
    int main ()
    {
       using namespace boost::interprocess;
       //Typedefs
       typedef allocator
          CharAllocator;
       typedef basic_string, CharAllocator>
          MyShmString;
       typedef allocator
          StringAllocator;
       typedef vector
          MyShmStringVector;
    
       //Open shared memory
       //Remove shared memory on construction and destruction
       struct shm_remove
       {
          shm_remove() { shared_memory_object::remove("MySharedMemory"); }
          ~shm_remove(){ shared_memory_object::remove("MySharedMemory"); }
       } remover;
    
       managed_shared_memory shm(create_only, "MySharedMemory", 10000);
    
       //Create allocators
       CharAllocator     charallocator  (shm.get_segment_manager());
       StringAllocator   stringallocator(shm.get_segment_manager());
    
       //This string is in only in this process (the pointer pointing to the
       //buffer that will hold the text is not in shared memory).
       //But the buffer that will hold "this is my text" is allocated from
       //shared memory
       MyShmString mystring(charallocator);
       mystring = "this is my text";
    
       //This vector is only in this process (the pointer pointing to the
       //buffer that will hold the MyShmString-s is not in shared memory).
       //But the buffer that will hold 10 MyShmString-s is allocated from
       //shared memory using StringAllocator. Since strings use a shared
       //memory allocator (CharAllocator) the 10 buffers that hold
       //"this is my text" text are also in shared memory.
       MyShmStringVector myvector(stringallocator);
       myvector.insert(myvector.begin(), 10, mystring);
    
       //This vector is fully constructed in shared memory. All pointers
       //buffers are constructed in the same shared memory segment
       //This vector can be safely accessed from other processes.
       MyShmStringVector *myshmvector =
          shm.construct("myshmvector")(stringallocator);
       myshmvector->insert(myshmvector->begin(), 10, mystring);
    
       //Destroy vector. This will free all strings that the vector contains
       shm.destroy_ptr(myshmvector);
       return 0;
    }
    

提交回复
热议问题