Dear all,

I'm having an issue using auto_ptr inside a container. I have a std::map with the following format:
Code:
typedef  map<date, const MediatorEvent *> AtributeMap; // date is boost::gregorian
typedef pair<date, const MediatorEvent *> AtributePair;
typedef AtributeMap::iterator iAtributeMap;
typedef AtributeMap::reverse_iterator rAtributeMap;
These MediatorEvent classes are shared among a lot of clients through a Facade,
that's why it's declared as "const".

However, I would like to refer methods of this object, which is not possible since the g++ do not allow the reference to be a left parameter

Code:
MediaorEvent *m = _facade->getEvent(...); 
m->c_scr(); // main.cpp:81: error: passing 'const MediatorEvent' as 'this' argument of 'const std::string MediatorEvent::c_str()' discards qualifiers
If I remove the "const" on the container it works fine, but it allows any client to explicit delete the object, and this will bring a lot of inconsistencies in the code.

Another possibilty to avoid this is to use auto_ptr, but I'm not sure how and neither where to use it.

My question to you guys is: Is it possible to use it safetly inside a container, such as:

Code:
typedef  map<date, auto_ptr<MediatorEvent> > AtributeMap;
typedef pair<date, auto_ptr<MediatorEvent> > AtributePair;
typedef AtributeMap::iterator iAtributeMap;
typedef AtributeMap::reverse_iterator rAtributeMap;
??

My concern is to assure that the customers would share the object pointer but none of them would change the object or delete it. I tried to use a flyweight and even the Factory design pattern, but all of them introduces a lot of complexity in the architecture and in the code and I'm trying to avoid introducing new patterns for now.

Any suggestions or ideas?

Thanks & regards,
yezaim