
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 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: 1. Who actually gets passed the parameters `par1, par2` from `segment.construct`, the constructor of the object, e.g. `vector`? My understanding is that the template allocator parameter is being passed. Is that correct? 2. How can I add another parameter, in addition to `alloc_inst` that is required by the constructor of the object being created in shared memory? Thanks!