对象布局(不通过友元访问私有成员)

在一个特定的的“访问块”(被访问说明符限定的一组声明),变量在内存中肯定是连续存放的;然而“访问块”本身可以不按声明的顺序在对象中出现。

访问说明符是结构的一部分,它们并不影响从这个结构创建的对象。程序开始运行之前,所有的访问说明信息都消失了。访问说明信息通常是在编译期间消失的。在程序运行期间,对象变成了一个存储区域,没带任何访问限定信息,因此,如果有人真想破坏这些规则并且直接访问内存中的数据,那么C++并不能阻止他做这样的事。

下面是在类外部修改类的私有成员的一个测试:

#include<iostream>
using namespace std;
class A
{
        public:
        int i;
        private:
        int j;
        public:
        A(){i=1;j=2;}
        int return_i() {return i;}
        int return_j() {return j;}
};
int main()
{
        A a;
        cout<<"sizeof(A):"<<sizeof(A)<<endl;
        cout<<"before modify"<<endl;
        cout<<"i="<<a.return_i()<<endl;
        cout<<"j="<<a.return_j()<<endl;
        int *ptr_i=(int*)&a;
        *ptr_i=3;
        *(ptr_i+1)=4;
        cout<<"after modify"<<endl;
        cout<<"i="<<a.return_i()<<endl;
        cout<<"j="<<a.return_j()<<endl;

        return 0;


}

运行结果:

对象布局(不通过友元访问私有成员)

对象布局(不通过友元访问私有成员)

  

原文链接: https://www.cnblogs.com/liujiangyi/archive/2012/08/09/2629951.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    对象布局(不通过友元访问私有成员)

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/58748

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 上午8:49
下一篇 2023年2月9日 上午8:49

相关推荐