bitwise and memberwise

來源:互聯網
上載者:User

轉載請註明出處, 作者連絡方式:hongszh at gmail.com


在看《深度探索C++物件模型》的時候,碰到了Memberwise和bitwise的說法,仔細推敲了一下memberwise就是C++中成員初始化的一個泛稱,而bitwise是初始化過程中的一個特殊情況,這裡按我的理解對memberwise和bitwise做一個文字總結,不對的地方歡迎對該話題感興趣的朋友提出好的見解。

Memberwise Initialization

在P49,Default Memberwise Initialization一節:如果一個class沒有提供一個explicit copy construct,當該class object以相同class的另一個object作為初值時,其內部就是以所謂的memberwise initialization手法完成的。也就是把每一個內建的或派生的data member(比如一個指標或一數組)的值,從某一個object拷貝一份到另一個object身上,不過它並不會拷貝其中的member class object(這裡所說的這種情況應該是member class也不包含copy constructor,不論是被class設計者明確聲明,或者是被編譯器合成),而是以遞迴的方式施行memberwise initialization。

所以這裡的memberwise initialization 就是bitwise copy。

那麼如果一個class沒有提供一個explicit copy construct,當該class object以相同class的另一個object作為初值時,別且有一個member class object,這個member class 有一個copy constructor(不論是被class設計者明確聲明,或者是被編譯器合成,總之它是nontrivial),這種情況下該class就不會展現出“bitwise copy semantics”,就是說不會以遞迴的方式對member class object施行memberwise initialization,而是通過調用member class的copy constructor完成memberwise initialization。

Bitwise copy

綜上所述,bitwise copy前提條件是class沒有提供一個explicit copy construct,可以分兩個方面去理解:一個是含有member class oject的情況,一個是繼承自一個base class的情況;當然對於class中含有virtual functions或者含有virtual base classes的情況就不用討論了,肯定不會出現bitwise copy。

1. 如果一個class沒有提供一個explicit copy construct,當該class object以相同class的另一個object作為初值時,如果它有一個member class object,初始化member class object的時候是以遞迴的方式進行memberwise initialization,不會調用copy constructor進行初始化。

2. 如果一個class沒有提供一個explicit copy construct,當該class object以相同class的另一個object作為初值時,如果它繼承自一個base class,該base class不存在一個copy constructor(沒有被class設計者明確的聲明,也不會被編譯器合成),初始化base class的部分類似初始化member class object,直接copy base class相關member給要被初始化的base class的相關member。

Memberwise Assignment & Memberwise Initialization

一個class object可以從兩種方式獲得,一種是被初始化(initialization),一種是賦值(assignment),排除bitwise copy的情況,它們之間的主要區別是memberwise assignment調用每一個成員assignment operator(operator=),而memberwise initialization調用每一個成員的copy constructor。

see:  http://hi.baidu.com/hongszh/blog/item/c312c4ca63c2584ef21fe797.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.