【发布时间】:2014-12-10 20:52:38
【问题描述】:
基本上是这样的:
Cat CatFactory::CreateCat()
{
return Cat();
}
或者这个:
Cat* CatFactory::CreateCat()
{
return new Cat();
}
我知道一般建议是尽可能避免使用 new,并且倾向于在堆栈上创建对象,这样就不必使用 delete。这也适用于工厂吗?我看到的所有示例都倾向于使用 new 关键字。为什么会这样?
我不能使用智能指针,因为这是一个类项目,每个人都是 C++ 新手,我们必须稍后集成我们的项目。
【问题讨论】:
-
返回猫();返回一个本地对象,一旦超出范围就会导致使用它时未定义的行为:)您按值返回,因此您在调用代码处再次获得本地副本,但我不推荐它..
-
@cageman 这一点都不正确。
return Cat();将按值返回,调用 copy-ctor(由于RVO,即使这样也很有可能会被忽略)。第一个样本中没有 UB。 -
你的正确,感谢提醒。
标签: c++ memory memory-management new-operator factory