I have a few newb questions: I have the following classes class Base { Base(); virtual ~Base(); virtual doStuff(); } class Foo: public Base { doStuff(); } class FooContainer { createFoos(int numOfFoos); Foo* getFoo(int indexToFoo); Destroy(); } class BaseContainer { void addObj(boost::shared_ptr<Base> obj); } How do I cast the pointer returned from FooContainer::getFoo(), as something I can pass to BaseContainer::addObj ? Is this correct to do this? Assuming I cant change the implementation of FooContainer or the BaseContainer interface. The BaseContainer interface should not have a special case for adding Foo's. Good practise tells me I shouldn't create a temporary either. I do not want the shared_ptr in BaseContainer to call delete on Foo (I will manually call FooContainer::Destroy() ---- Now, what happens if I instead want FooContainer to only be responsible for creating the Foo objects, and not be responsible for deleting them. Instead I want the shared_ptr to call delete when the objects reference count reaches 0. How would that done? Thanks in advance, Josh S