【发布时间】:2014-01-13 02:42:58
【问题描述】:
我正在调整一种分析大量数据的算法,以使其运行得更快一些。它大量使用了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()) {}
【问题讨论】:
-
除了使您的代码更难阅读和维护之外,这两个函数可能没有什么不同并生成相同的目标代码。
-
你分析过你的代码吗?
-
问问自己,克隆有必要吗?我可以改用引用计数吗?
-
@Jarod42 还没有,我才刚刚开始优化,克隆函数几乎是唯一有任何分支的函数
-
因此,分析您的代码,您将看到需要优化的地方。我很确定这不是您的克隆方法的瓶颈。
标签: c++ performance short-circuiting