对象模型如何影响程序

本文探讨了C++的对象模型,通过一个简单的函数示例揭示了编译器在背后进行的转换过程,说明对象模型如何影响程序的运行和设计。深入理解这一概念对于优化代码和解决潜在问题至关重要。

先看一下一个简单的函数:

X foobar()
{
    X xx;
    X *px = new X;
    xx.foo();
    delete px;
    return x;
}

编译器做出的一些转换:

void foobar(X& _result)
{
    //按原来的程序需要构造两个临时变量
    //所以这里使用引用的方式来返回结果

    //调用构造函数
    _result.X::X();

    //申请内存(其实就是operator new(size_t size))
    px = _new(sizeof(X));
    //如果申请内存成功就调用构造函数
    if( px != 0)
        px->X::X();

    //这里就是成员函数的形式的转换,成员函数其实
    //就是一个一般的函数,然后把this指针传入进去
    //下面的foo 就是 foo(X* this);
    foo(&_result);

    //虚函数的基本调用方式,也就是通过vptr来调用
    //vptr指向vtbl,然后直接用->符号即可访问vtbl
    //然后下标2则可以访问到一个函数指针,所以调用
    //就是这样(*xxx)(px) xxx就是取到的指针
    //px就是this指针
    (*px->vtbl[2])(px);

    //同上,这是析构函数的多态使用,也需要
    //检测指针不为空,因为c++提供一个保证
    //就是对NULL进行delete不会出错
    if( px != 0)
    {
        (*px->vtbl[1])(px);
        _delete(px);
    }

    return;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值