|
Ссылки на указатели Производящая функция не обязана возвращать Foo*. С таким же успехом подойдет и Foo&. class Foo { public: static Foo& make(); // Производящая функция virtual void do_something() = 0; virtual void do_something_else() = 0; }; // В файле foo.cpp class PFoo : public Foo { private: Foo* foo; public: PFoo(Foo* f) : foo(f) {} virtual void do_something() { foo->do_something(); } virtual void do_something_else() { foo->do_something_else(); } }; class Bar : public Foo { // Все для производного класса }; Foo& Foo::make() { return *(new PFoo(new Foo)); } Единственная проблема заключается в том, что копирование с помощью конструктора копий, как вы вскоре убедитесь, строго воспрещается. И все же люди, вооруженные оператором &, неизменно пытаются копировать объект. С оператором * соблазн намного слабее. Во всем остальном выбор - дело вкуса. |
Copyright 2005. Климов Александр. All Right Reserved.