Boost logo

Boost Users :

From: John (john_at_[hidden])
Date: 2008-06-25 15:39:27


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


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net