
Hi Jeff,
I think he's pointing out the lack of RAII. From your first example:
named_shared_object segment;
if(!segment.create("/MySharedMemory", //segment name 65536)){ //segment size in bytes return -1; }
void * shptr = segment.allocate(1024/*bytes to allocate*/);
segment.deallocate(shptr);
I'd rather see:
try { named_shared_object segment("/MySharedMemory",65536);
shmem::shared_ptr lPtr = segment.allocate(1024); } catch( const shmem::exception& aExc ) { ... }
I see. Anyway, in the first example, if "allocate" throws, segment destructor will automatically unmap and destroy the segment. If you think that a one step constructor is better, there is no problem to add it. Just like fstream can do a default constructor or open the file in the constructor. The only minor point is that we have to say if we want to create, connect or open_or_create the segment in the constructor, so we need an extra constructor.
Which brings up the issue that I could not easily find any discussion of lifetime requirements in the documentation.
Ok. It's true that the segment must be open while using it but, maybe I should point out with some lifetime examples. Thanks, Ion