C++中逐位语义和逐成员语义的区别

C++中的拷贝构造函数工做模式最多见的就是逐位语义拷贝和逐成员语义拷贝,区别以下:函数

逐位语义拷贝:是指当此类的全部成员都是基本的内置数据类型,其拷贝操做等同于拷贝相同的内存内容。对象

逐成员语义拷贝:此类的数据成员存在有其余类类对象的数据成员。这些成员对象的拷贝须要递归地调用它们本身的拷贝构造进行复制。继承

 

 

另外,什么状况下,一个类不展示其逐位拷贝语义呢?递归

简言之,就是这个类是一个复杂类(支持继承、多态、含有成员对象的任意状况或组合)。内存

1:该类含有成员对象。而这些成员对象又有可用自身的复制构造。(不管是显示地,仍是隐式地由编译器生成)编译器

2:该类有继承关系。而其基类又有自身可用的拷贝构造。(不管是显示地,仍是隐式地由编译器生成)编译

3:该类存在于虚基类机制下。而其基类又有自身可用的拷贝构造。(不管是显示地,仍是隐式地由编译器生成)构造函数

4:该类存在于虚函数机制(多态机制)下。而其基类又有自身可用的拷贝构造。(不管是显示地,仍是隐式地由编译器生成)数据类型

 

由于,3,4都要求在复制构造期间,调整正确的vptr 和 vbptr。因此不能使用简单的逐位拷贝语义。数据

相关文章
相关标签/搜索