Я знаю, что немного опоздал, но надеюсь, это кому-нибудь поможет ...
Будучи новичком в программировании на C ++, я также застрял на некоторое время над этой проблемой. Я хотел создать фабричный метод, который возвращает ссылку на абстрактный объект. Мое первое решение с использованием указателей работало хорошо, но я хотел остаться более «в стиле C ++». Вот фрагмент кода, который я написал, чтобы продемонстрировать это:
#include <iostream>
using std::cout;
using std::endl;
class Abstract{
public:
virtual void foo() = 0;
};
class FirstFoo: public Abstract{
void foo()
{
cout << "Let's go to the foo bar!" << endl;
}
};
class SecondFoo: public Abstract{
void foo()
{
cout << "I prefer the foo beer !" << endl;
}
};
Abstract& factoryMethod(){
static int what = 0;
if(what++ % 2 == 0)
return *(new FirstFoo());
else
return *(new SecondFoo());
}
int main(int argc, char* argv[])
{
int howMany = 10;
int i = 0;
while(i++ < howMany)
{
Abstract& abs = factoryMethod();
abs.foo();
delete &abs;
}
}
Открыто для любой критики!