C++中如何限制对象私有数据成员的修改?

How to restrict objects private data member modification in C++?

请检查下面的代码,我需要一个解决方案来限制修改class A 的私有数据成员。请建议。

class A{
private:
    int a;
    int b;

public:
    A(int i=0, int j=0):a(i),b(j){
        cout<<"A's constructor runs"<<endl;
    }
    void showVal(){
        cout<<"a: "<<a<<" b: "<<b<<endl;
    }
};

int main(){
    A ob1(10,20);
    ob1.showVal();

    int *ptr = (int*)&ob1;
    *(ptr+0)=1;
    *(ptr+1)=2;

    ob1.showVal();

    return 0;
}

您无法阻止某人 'warping' 那样的指点。您无法阻止您的 private 数据被故意或恶意修改,只能被您的 class.

的用户意外修改

当然,除非您设法将数据存储到只读内存中...您可以从 OS 中获取一些内存,将数据放入其中,然后获取 OS将内存标记为只读 - 然后才 'publish' 指向您的数据的指针。当然,你也不能修改你的数据...

您的代码示例与其说是关于 修改 私有数据成员,不如说是关于通过流氓指针对对象进行彻底 破坏。我认为 C++ 中没有实用的方法来防止疯狂或邪恶的程序员这样做。

private 旨在保护理智的客户不会意外破坏对象的内部状态。那些不想玩的人可以简单地做 #define private public 反正。

我想起了 Herb Sutter 的一句话,它与另一个主题相关,但我认为它很好地解决了您的问题:

Remember, our concern is to protect against Murphy, not Machiavelli—against bugs and mistakes, not deliberate crimes—and such pathological abuses fall into the latter category.