1. 程式人生 > >C++物件模型學習筆記7 站在物件模型的尖端

C++物件模型學習筆記7 站在物件模型的尖端

  • {P310} C++被吹毛求疵的一點是:它缺乏一個保證安全的downcast。只有在型別真的可以被適當轉換的情況下,你才能夠執行downcast。一個type-safe downcast必須在執行期對指標有所查詢,查檢視它是否指向它所展現(表達)之object的真正型別。
  • 危險在於,如果一個父類指標原本指向的是一個父類物件,被強轉後子類指標後,其實它不擁有一些子類的資料或行為,此時當成子類指標來用就不完全了。
  • 欲支援此機制的話,在空間和時間上都需要額外的負擔:
    1. 需要額外的空間儲存型別資訊(type info),通常是一個指標,指向某個型別資訊節點。
    2. 需要額外的時間以決定執行期的型別(runtime type)。
  • {P310} 對於那些大量使用多型的程式來說,需要正統而合法的大量downcast操作;而內建資料型別或者非多型型別,不應該受各種額外負擔帶來的不良後果。一個策略是新增新的關鍵字,區別那些支援多型的子型別,但缺點必須修改程式。另一種策略是通過宣告一個或者多個virt function來區別,優點通過將指向類相關的執行時資訊的指標存入虛擬函式表,可以大大降低額外負擔。