gpt4 book ai didi

c++ - 克隆函数速度 : if/else vs short circuit evaluation

转载 作者:行者123 更新时间:2023-11-30 02:50:03 28 4
gpt4 key购买 nike

我正在调整一种分析大量数据的算法,以使其运行得更快一些。它大量使用 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com