C++中的拷貝構造函數工做模式最多見的就是逐位語義拷貝和逐成員語義拷貝,區別以下:函數
逐位語義拷貝:是指當此類的全部成員都是基本的內置數據類型,其拷貝操做等同於拷貝相同的內存內容。對象
逐成員語義拷貝:此類的數據成員存在有其餘類類對象的數據成員。這些成員對象的拷貝須要遞歸地調用它們本身的拷貝構造進行復制。繼承
另外,什麼狀況下,一個類不展示其逐位拷貝語義呢?遞歸
簡言之,就是這個類是一個複雜類(支持繼承、多態、含有成員對象的任意狀況或組合)。內存
1:該類含有成員對象。而這些成員對象又有可用自身的複製構造。(不管是顯示地,仍是隱式地由編譯器生成)編譯器
2:該類有繼承關係。而其基類又有自身可用的拷貝構造。(不管是顯示地,仍是隱式地由編譯器生成)編譯
3:該類存在於虛基類機制下。而其基類又有自身可用的拷貝構造。(不管是顯示地,仍是隱式地由編譯器生成)構造函數
4:該類存在於虛函數機制(多態機制)下。而其基類又有自身可用的拷貝構造。(不管是顯示地,仍是隱式地由編譯器生成)數據類型
由於,3,4都要求在複製構造期間,調整正確的vptr 和 vbptr。因此不能使用簡單的逐位拷貝語義。數據