
Hello Pavel,
T * ptr = shmem_segment.create<T>("ObjectName")[size]
It could be then used:
T* t = segment.create(...); // no smarteness used shmem_smart_pointer ptr = segment_create(...); // smart ptr used (void)segment.create(...); // no leak happens
The shared memory allocation is done in the proxy function, the example I've put was just to see the const_ref-non_const-ref problem so T* t = segment.create<T>("name"); --> T* t = segment.create<T>("name")/*proxy object returned*/; --> Is an invalid option and it does not compile, because that expresion returns a temporary proxy object not assignable to T*. To build an object without parameters, you should do: T* t = segment.create<T>("name")( ); --> T* t = segment.create<T>("name") /*proxy object returned, calling to operator()*/ ( /*empty param list*/); /*pointer returned*/ because the argument-less operator() is the responsible for allocating _and_ constructing the object, so there are no leaks. Obviously, this syntax is not very straight forward, and I should try to get more logical syntax when default constructing objects: T* t = segment.create<T>("name"); I will have a look at it, since I think this syntax is better, thank you for the idea. Regarding to const/non_const parameter issue, I will try to make a simpler example not involving proxies to just point out the problem and repost the question hoping there is response. Meanwhile, I keep on improving Shmem, currently adding boost unordered _map as name/memory mapping association instead of assoc_vector to test pros/cons. Regards, /Ion>