gpt4 book ai didi

c++ - 你会创建一个私有(private)类成员来消除多级函数调用吗?

转载 作者:搜寻专家 更新时间:2023-10-31 00:17:15 25 4
gpt4 key购买 nike

虽然我用C++写了这个例子,但是这个代码重构问题也适用于任何支持OO的语言,比如Java。

基本上我有一个A类

class A
{
public:
void f1();
void f2();
//..
private:
m_a;
};

void A::f1()
{
assert(m_a);
m_a->h1()->h2()->GetData();
//..
}

void A::f2()
{
assert(m_a);
m_a->h1()->h2()->GetData();
//..
}

你们会创建一个新的私有(private)数据成员m_f 来保存指针m_a->h1()->h2() 吗?我看到的好处是它有效地消除了多级函数调用,这确实大大简化了代码。

但从另一个角度来看,它创建了一个“不必要的”数据成员,可以从另一个现有数据成员m_a推导出来,这有点多余?

我只是在这里进退两难。到目前为止,我无法说服自己使用其中一个。

你们更喜欢哪一个,有什么原因吗?

最佳答案

这种技术的花哨词是缓存:您计算一次双向引用,然后将其缓存到对象中。通常,缓存可以让您“支付”计算机内存以加快计算速度。

如果探查器告诉您您的代码在 m_a->h1()->h2() 的重复调用中花费了大量时间,这可能是一个合理的优化,前提是h1h2 的返回值永远不会改变。但是,在没有先分析的情况下进行这样的优化几乎总是过早优化的坏迹象。

如果性能不是问题,一个好的规则是避免存储可以从对象中存储的其他成员计算得出的成员。如果你想提高清晰度,你可以引入一个很好命名的方法(一个成员函数)来计算两次引用而不存储它。只有在对性能至关重要的极少数情况下,存储才有意义。

关于c++ - 你会创建一个私有(private)类成员来消除多级函数调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13907470/

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