جایی خوندم که همچین چیزی به عنوان یه اصطلاحه که میذاره کارهایی انجام بدیم که مستقیما تو C++ ساپورت نمیشه.
و کد زیر آورده شده که تو اون اثر سازنده مجازی بوسیله تابع عضو clone() و تابع عضو create() که مجازی هستن دیده میشه:
class Shape {
public:
virtual ~Shape() { } // A virtual destructor
virtual void draw() = 0; // A pure virtual function
virtual void move() = 0;
...
virtual Shape* clone() const = 0; // Uses the copy constructor
virtual Shape* create() const = 0; // Uses the default constructor
};
class Circle : public Shape {
public:
Circle* clone() const; // Covariant Return Types; see below
Circle* create() const; // Covariant Return Types; see below
...
};
Circle* Circle::clone() const { return new Circle(*this); }
Circle* Circle::create() const { return new Circle(); }
در تابع عضو clone()، دستور new Circle(*this)
سازنده کپی Circle رو صدا میزنه تا محتوای this رو در شیء جدید ایجادشده Circle کپی کنه.