How to pass parameters to manage_shared_memory.construct() in Boost.Interprocess
        Posted  
        
            by recipriversexclusion
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by recipriversexclusion
        
        
        
        Published on 2010-03-13T04:30:22Z
        Indexed on 
            2010/03/13
            4:37 UTC
        
        
        Read the original article
        Hit count: 413
        
I've stared at the Boost.Interprocess documentation for hours but still haven't been able to figure this out. In the doc, they have an example of creating a vector in shared memory like so:
//Define an STL compatible allocator of ints that allocates from the managed_shared_memory.
//This allocator will allow placing containers in the segment
typedef allocator<int, managed_shared_memory::segment_manager>  ShmemAllocator;
//Alias a vector that uses the previous STL-like allocator so that allocates
//its values from the segment
typedef vector<int, ShmemAllocator> MyVector;
int main(int argc, char *argv[])
{
    //Create a new segment with given name and size
    managed_shared_memory segment(create_only, "MySharedMemory", 65536);
    //Initialize shared memory STL-compatible allocator
    const ShmemAllocator alloc_inst (segment.get_segment_manager());
    //Construct a vector named "MyVector" in shared memory with argument alloc_inst
    MyVector *myvector = segment.construct<MyVector>("MyVector")(alloc_inst);
Now, I understand this. What I'm stuck is how to pass a second parameter to segment.construct() to specify the number of elements. The interprocess document gives the prototype for construct() as 
MyType *ptr = managed_memory_segment.construct<MyType>("Name") (par1, par2...);
but when I try
MyVector *myvector = segment.construct<MyVector>("MyVector")(100, alloc_inst);
I get compilation errors.
My questions are:
- Who actually gets passed the parameters par1, par2fromsegment.construct, the constructor of the object, e.g.vector? My understanding is that the template allocator parameter is being passed. Is that correct?
- How can I add another parameter, in addition to alloc_instthat is required by the constructor of the object being created in shared memory?
There's very little information other than the terse Boost docs on this.
© Stack Overflow or respective owner