【发布时间】:2011-08-13 15:34:21
【问题描述】:
假设我有某种工厂函数,它创建的对象主要用于很短的时间跨度(可能只是在调用此工厂函数的函数范围内)。
像这样:
foo factory(some_parameter fancy_parameter)
{
return foo(fancy_parameter);
}
//this gets called all the time... very often
void every_frame_function()
{
for(int i=0; i<big_number; ++i)
do_something_with(factory(some_parameter(i));
} //don't need those foos out here!
有没有一种方法可以实现这样的工厂,而无需用户关心内存管理(通过返回指针),无需处理智能指针开销,也无需返回必须硬拷贝的 foo 对象?
也许我要的是一只在这里下金蛋的鹅,但也许这里需要使用一些移动语义(我只是不知道如何)。
【问题讨论】:
-
你真的想在每次调用 factory() 时都创建一个新工厂吗?还是每次工作都返回同一家工厂?智能指针还有什么问题?它们是现代 C++ 工作的基础。
-
工厂函数似乎要解决什么问题?
-
对于(2D-)碰撞检测,我需要边界框,其中包含 13 个二维向量(4 个角顶点、4 个边缘顶点、4 个法线顶点和一个中心顶点,总共 26 个浮点数)。工厂函数用于创建某些类型的边界框。大多数这些边界框都被永久保存;但是,我也有很多动态创建的对象,我需要为每个对象创建边界框。这不是性能杀手,我也不喜欢过早的优化,但我问是否有一些东西可以在没有黑客攻击的情况下轻松实现。
标签: c++ performance factory