【问题标题】:Logical Private VS Physical Private [duplicate]逻辑私有VS物理私有[重复]
【发布时间】:2020-05-25 21:01:10
【问题描述】:

我有一个简单的程序:

class Element
{
public:
    Element(void) { m_iVal = 56789;}
    ~Element(void) {};
private :
    int m_iVal;
};  

变量m_iVal 是私有的,从概念的角度来看(继承、...)存在限制。
但是,虽然是私有的,但仍然可以访问它的内容。

有没有办法禁止对变量(或堆区域)的物理访问,以便对这个私有区域的任何访问都会导致内存访问冲突。

【问题讨论】:

  • 你所做的是未定义的行为。
  • private 不是让会员无法访问,而是防止您不小心访问。如果您仍然想访问它,您可以,但您为什么要访问它? (顺便说一句,您访问它的代码具有未定义的行为,您不能阻止某人这样做,尽管也有合法的方法)
  • @RinatVeliakhmedov 我不确定这是 C++ 中未定义的行为。至少在 C 中,要求结构的地址与其第一个成员的地址相同。
  • @RinatVeliakhmedov 我非常清楚这一点,但我希望禁止另一个本地第三方程序或 DLL 在我的对象实例中进行“任何搜索”...
  • @Landstalker 你想要的是一只独角兽。你不能拥有那个。你可以养一匹小马。它不是独角兽,但看起来很相似。不过不会变魔术。对不起。

标签: c++ private encapsulation


【解决方案1】:

访问保护; public/protected/private 纯粹是编译时的事情。它的存在是为了防止简单的错误。它不是运行时保护机制。

一旦您的代码通过了编译器的第一阶段,publicprotectedprivate 就根本不存在了。而且在生成的二进制文件中,没有任何痕迹。

【讨论】:

  • 我同意你的看法。
猜你喜欢
  • 2020-02-28
  • 2013-11-27
  • 1970-01-01
  • 2023-04-11
  • 2014-10-23
  • 1970-01-01
  • 1970-01-01
  • 2018-07-17
  • 2019-02-02
相关资源
最近更新 更多