重构过程中的一个坑

今天重构别人的代码, 发现有个类成员函数, 把内部的一个map通过引用暴露出来, 导致访问权限泄露, 所有地方都可以绕过类的控制对成员进行访问。 类似这样:
class CTest
{
public:
    std::map<string, STRUCT_DATA> &datas()
    {
        return datas_;  // 返回了内部数据, 修改权限放开
    }

private:
    std::map<string, STRUCT_DATA> datas_;  
}
这样导致要对这个数据进行修改的时候, 改一发而动全身, 不得不去把所有获取过这个数据的地方的逻辑全部看一遍, 防止修改后导致别的地方出现bug. 尽量还是不要这样放开访问权限。 需要更新可以通过函数来访问, 比如:
void Update(const string &key, const STRUCT_DATA &data)
{
    // do something update
} 
这样, 不需要查看这个引用已经被传到哪里, 是如何被修改的。 只需要保证函数参数是ok的即可。

发表评论

电子邮件地址不会被公开。 必填项已用*标注