David Abrahams wrote:
John wrote:
Thorsten Ottosen wrote:
John skrev:
This pattern/idiom is well-established:
struct A { virtual A* clone () = 0; };
struct B : public A { virtual B* clone (); };
But the above does not work when the pointers A* and B* are replaced by shared_ptr<A> and shared_ptr<B>:
struct A { virtual shared_ptr<A> clone () = 0; };
struct B : public A { virtual shared_ptr<B> clone (); };
Is there a workaround? Another way to solve the same problem? Thanks! Well, don't use shared_ptr here. A newly created clone is not shared, and it makes the interface less usable in other context to return a shared ptr here.
-Thorsten
Hah! Well, yes, I guess it's true that there's always an option not to use smart pointers at all. :)
auto_ptr would be more appropriate, and nearly as safe.
The other way to solve the same problem is to have the virtual clone always return shared_ptr<A> and add another member function that returns shared_ptr<B>. Have the virtual function call that one.
Cheers,
Hi, I don't follow -- why is auto_ptr more appropriate? -John