您的位置:首页 > 其它

对象模型如何影响程序

2015-08-27 18:59 190 查看
先看一下一个简单的函数:

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: