Boost logo

Boost :

Subject: Re: [boost] [interprocess] default constructors
From: Ion Gaztañaga (igaztanaga_at_[hidden])
Date: 2008-11-30 07:23:13


Jan Stetka wrote:
> Does the shared memory get destroyed when theses types go out of scope
> or am I safe with local instances, if so I don't need the default
> constructors. You've designed the library so well that it is showing
> problems in my coding style :-)

Sorry, I don't understand very well this point. Shared memory is never
destroyed until explicitly removed, but it must be reopened if the
shared_memory_object object is destroyed:

//Imagine a default constructor is available:
managed_shared_memory global_shm;

void func(bool false_is_open_true_is_create)
{
    if(false_is_open_true_is_create){
       managed_shared_memory shm(create_only, "name", MemSize);
       global_shm.swap(shm);
    }
    else{
       managed_shared_memory shm(open_only, "name", MemSize);
       global_shm.swap(shm);
    }
    //global_shm is usable here because it has been swapped
    //with a correctly opened instance
    global_shm.create<>(...);
}

If global_shm is destroyed. Shared memory is still in the system,
although not mapped. To destroy it, you must explicily call

shared_memory_object::remove("name");

If global_shm is destroyed you can reopen it can using

managed_shared_memory shm(open_only, "name", MemSize);

Regards,

Ion


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk