So here's a problem that I've run into. I have a class defined thus:
class Savable
{
// some pure virtual methods
virtual void saveYourself(boost::shared_ptr<Saver> saver) = 0;
}
And another class that implements the above:
class SomeClass : Savable
{
// implements Savable methods
}
Finally, I have a class that writes a Savable to disk:
class Saver
{
virtual void save(boost::shared_ptr<Savable> saveMe);
}
Now, there might be the case where SomeClass calls Saver because it wants to save itself because the end user has a subclass that writes to disk in it's own special way.
Now, I know I can't call Saver::save() like this:
boost::shared_ptr me(this);
saver->save(me);
because the shared_ptr would try to delete *this when it goes out of scope. And I didn't see any way in shared_ptr to release the pointer. What is a good way to work around this?