|
Boost Users : |
From: Andy Rushton (quergle-mingw_at_[hidden])
Date: 2008-07-05 07:33:57
John wrote:
> This pattern/idiom is well-established:
>
> struct A {
> virtual A* clone () = 0;
> };
>
> struct B : public A {
> virtual B* clone ();
> };
Except you've quoted it wrong. The return type of virtual functions must
always be the same for all classes in the polymorphic hierarchy. This is
standard C++ polymorphism - always use a pointer to the superclass to
point to all subclasses. The return type in this case should be A* for
both cases:
struct A {
virtual A* clone () = 0;
};
struct B : public A {
virtual A* clone ();
};
--------------^
Similarly, for the shared_ptr version, do the same, i.e. always use
shared_ptr<A> to point to objects of types A and B.
See the manual for my own smart pointer classes for more on this topic:
http://stlplus.sourceforge.net/stlplus3/docs/smart_ptr.html#cloning
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