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.
请检查下面的代码,我需要一个解决方案来限制修改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.