-
问题内容:深度探索C++对象模型系列问题之二(2)
- 原讨论链接:http://community.csdn.net/expert/topicview1.asp?id=5252501
- 所属论坛:C++ 语言
审核组:C/C++
- 提问者:femalelover
解决者:steedhorse
- 感谢:akirya steedhorse jixingzhong
- 关键字:函数 调用 C/C++ 指针 C++ 语言 二进制 内存 拷贝 编译 定义 const type_info
- 答案:
2,按位拷贝是不是说按内存中一个bit一个bit位的拷贝. 比如说一个对象 A obj1 在内存二进制是(11...01) 那么如果 A obj2 = obj1 之后, 得到的 obj2的内存二进制也是(11...01)?
3, vtbl的slot1为一个type_info指针, 这个指针好像在 ptr-->func()调用虚函数的过程中没有使用到, 而仅仅是用来作为向下转换时用的?
---------------------------------------------------------------
其实就是用memcpy一下
虚函数调用跟这个type_info没有任何关系的。
---------------------------------------------------------------
反过来想,如果C++语言实现虚函数的动态绑定需要检测类型信息,那代价可就比调用一个一般的函数高很多了。这也不符合C++用较小的代价来动态函数绑定的设计初衷。
而一旦那样的话,程序员很可能宁可自己通过手工机制来实现多态了。
---------------------------------------------------------------
比如 typeid的返回是type_info类型。
type_info类:这个类的确切定义是与编译器实现相关的,下面是《C++ Primer》中给出的定义(参考资料[2]中谈到编译器必须提供的最小信息量):
class type_info {
private:
type_info(const type_info&);
type_info& operator=( const type_info& );
public:
virtual ~type_info();
int operator==( const type_info& ) const;
int operator!=( const type_info& ) const;
const char* name() const;
};
- 评价:
给朵鲜花(3)
扔个鸡蛋(1)