В основном, это:Возвратите статически или динамически выделенный объект с завода?
Cat CatFactory::CreateCat()
{
return Cat();
}
или это:
Cat* CatFactory::CreateCat()
{
return new Cat();
}
Я знаю, что общий совет, чтобы избежать нового, когда это возможно, и, как правило, предпочитают создание объекта на стеке так один не должен использование удаление. Это относится и к фабрикам? Все примеры, которые я вижу, имеют тенденцию использовать новое ключевое слово. Почему это так?
Я не могу использовать интеллектуальные указатели, потому что это проект класса, и все не знакомы с C++, и нам нужно интегрировать наши проекты позже.
возвращение Cat(); возвращает локальный объект, который, как только он выходит из области видимости, приведет к неопределенному поведению при его использовании :) Вы возвращаетесь по значению, поэтому вы снова получаете локальную копию кода вызова, но я бы не рекомендовал его. – cageman
@cageman, что совсем не правильно. 'return Cat();' вернется по значению, вызывая copy-ctor (с очень высокой вероятностью, даже из-за [** RVO **] (http: //en.wikipedia.орг/вики/Return_value_optimization)). В первом примере нет UB. – WhozCraig
Правильно, спасибо за хэд-ап. – cageman