我正在调整一种分析大量数据的算法,以使其运行得更快一些。它大量使用 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()) {}
最佳答案
您的优化看起来很复杂,实际上是微不足道的,因为它可能发出与前一个相同的代码。
考虑低级操作,而不是语法:一个条件,一个分支。少做难。
更新:我注意到我并没有真正回答您的问题:可以更快地完成吗?嗯,是!您可以只为未初始化的值编写一个子类。
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
实例的定义,您可能需要为每个 DerivedObject< 编写一个
类型。Invalid*
子类
关于c++ - 克隆函数速度 : if/else vs short circuit evaluation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20767955/