当前位置: 网站首页 > 开发语言 > C/C++

《深度探索C++对象模型》读书笔记(2)

时间:1970-1-1 08:33:31来源: C/C++作者:admin 点击:0次 字体 [ С]

   举个简单的例子,不管使用memcpy()或memset(),都只有在“classes不含任何由编译器产生的内部members”时才能有效运行。而如下的class由于声明了一个virtual function,编译器为其产生了vptr,此时若使用上述函数将导致vptr的初值被改写。

 class Shape ...{
public:
// 这会改变内部的vptr
Shape() { memset(this,0,sizeof(Shape)); };
virtual ~Shape();
// ...
};

// 扩张后的constructor
Shape::Shape()
{
// vptr必须在使用者的代码执行之前先设定妥当
_vptr_Shape = _vtbl_Shape;

// memset会将vptr清为0
memset(this,0,sizeof(Shape));
}

   ***成员的初始化队伍***

   下列情况中,为了让你的程序能够被顺利编译,你必须使用member initialization list:

   (1)当初始化一个reference member时;


发表评论
验证码:
最新评论
相关文章
最热文章