我正在调整一种分析大量数据的算法,以使其运行速度更快一些。它大量使用clone
函数,如下所示:
const Object* clone() const {
if (this != INVALID_OBJECT) {
return new DerivedObject(*this);
} else {
return this;
}
}
该算法使用指向单个无效对象的指针来显着降低内存需求,并将其传递给复制构造函数将失败。
我的问题是,使用短路评估是否会通过缩短执行时间来提高clone
函数的性能:
const Object* clone() const {
const Object* clonedObject = INVALID_OBJECT;
(void)((this != INVALID_OBJECT)&&(clonedObject = new DerivedObject(*this));
return clonedObject;
}
有没有办法减少clone
函数的执行时间?复制构造函数通常遵循模式
DerivedObject(const DerivedObject& derivedObj) : Object(derivedObj.getField1()),
field2(derivedObj.getField2()) {}
答案 0 :(得分:3)
您的优化(看起来很复杂)实际上是微不足道的,因为它可能会发出与前一个相同的代码。
考虑低级操作,而不是语法:一个条件,一个分支。很难少做。
更新:我注意到我没有真正回答你的问题:可以更快地完成吗?嗯,是!您可以只为未初始化的值编写子类。
class InvalidObject : public Object
{
public:
const Object* clone() const {
return this;
}
};
使全局INVALID_OBJECT
成为此类的一个实例:
Object *INVALID_OBJECT = new InvalidObject();
现在,您不需要任何clone()
覆盖中的条件:
class DerivedObject : public Object
{
public:
const Object* clone() const {
return new DerivedObject(*this);
}
};
当然,根据层次结构和INVALID_OBJECT
实例的定义,您可能需要为每个Invalid*
类型编写DerivedObject
子类。