我们平时创建对象时,都用的是new操作符了,这样还可以调用构造函数,一举两得,但是如下的程序:
while(/*一个精密循环*/)
{
//do something.
MyClass *pNewObj=new MyClass(p1,p2,p3...);
}
相信大家不陌生,读文件、初始化都会用到上面的代码,暂且撇开MemoryPool不谈,如果使用创建模式里面的类厂模式+Clone,如何优化?
MyClass* MyClass::MakeOne(T1,T2,T3...) const
{
return new MyClass(p1,p2,p3);//就是对这种方式进行改进,换成Clone函数。
}
不知到有没有大虾做过?关键的部分:Clone函数的实现要注意些什么?这样的模型效率会不会有比较好的提高?
请给点意见,多谢先!
这种模式主要的模式是隐藏真正的创建细节,使得客户端程序员不用考虑究竟创建了哪个类的实例,而由库设计人员自己确定,从而提升客户代码的灵活度。这种模式并不是为了提高效率。
如果需要高效率创建,还是用Memory Pool+Inplacment new比较有效点,下面是一个简单的示例:
MemoryPool mp;
for(int i = 0; i < 100; ++i)
MyClass *Obj = new(mp.alloc()) (p1, p2, p3);
一般来说,Memory Pool可以大幅提高效率。