c ++中受保护访问中的数据损坏

时间:2009-01-30 19:28:58

标签: c++ private protected

变量“受保护”很容易被派生类恶意改变? 我应该在基类变量中使用“private”而不是“protected”吗?

5 个答案:

答案 0 :(得分:10)

如果您担心'恶意'修改,那么即使将数据标记为private:也无济于事。

C ++访问说明符仅对基本上遵守规则的代码有用。

将成员标记为private会阻止您班级的普通用户弄乱他们。但是,即使是有bug的非恶意代码也可能破坏这些成员。超出,错误的指针算法或不正确使用强制转换让C ++程序员导致这些问题。

答案 1 :(得分:2)

在C ++中无法阻止“恶意”访问,因为您总能以某种方式绕过编译器限制。如果您担心“意外”更改,请继续将其设为私有。

答案 2 :(得分:1)

好吧,受保护的成员会继承。如果您不希望这种情况发生,请将它们设为私有

答案 3 :(得分:0)

答案 4 :(得分:0)

一般来说,如果您正在考虑声明一个私有变量,那么您应该退后一步,问问自己为什么甚至在头文件中发布声明?

而不是在foo.h中公开所有世界的成员变量:

class foo {
private:
    int    please_dont_modify_me;
    double pretend_you_dont_see_this_declaration;
    char   dont_look_at_this [128];
public:
    ....
};

只使用不完整的私有类型,即定义:

class foo {
    struct foo_privates & mine;   // incomplete type
public:
    ...
};

然后在foo.cpp ONLY

struct foo_privates {
     int    i;
     double d;
     char   str[128];
}; 

当然,foo的构造函数必须分配单独的对象,析构函数必须销毁它。