[問題] Polymorphism 的設計問題
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
沒有 C++11 的編譯器
問題(Question):
最近遇到一個設計的問題, 想請問一下有沒有什麼比較好的解決方法
我不太會描述(如果標題不好也麻煩提示一下要怎麼改)
舉個例子來說明好了
https://gist.github.com/1279325
我想讓我的 Controller 完全負責管理 _object 物件的生命週期
可是這個物件有好幾個可能的形態
我把它們的 interface 統一成了一個 (abstract) base class Base
然後讓 ExtendA 或 ExtendB 繼承它, 各自實作繼承來的 pure virtual methods
在 Controller 中就用這個 interface 來使用 _object
上面程式碼中的做法完全可以動
可是很明顯當我呼叫 setObject() 時就會發生 memory leakage
因為 _object 被我 cast 成 Base * 了, 解構式不會釋放 _memberA 或 _memberB
我現在的方法是在 Controller 中存一個 enum 變數, 標記使用的 type 為何
然後在 setObject 中根據這個變數判斷, 把 _object cast 回原本的形態後再刪除
可是這樣整個設計都很詭異, 有點失去多型的意義
更何況如果以後要增加一個 ExtendC ExtendD 等等等的時候...
我知道 template 可以對付這類狀況
可是在實際設計中, Controller 其實是要繼承一個 non-template class
所以我不能把 Controller 設計成 template
不知道有沒有比較有設計經驗的人能為我解釋一下這種問題要怎麼解決
另外我是半途出家的, 對 C++ 的程式架構設計沒什麼瞭解
在 dynamic-binding 語言這根本不存在任何問題
或者像 Java 有 Class 類別也可以輕鬆解決
所以如果這個設計在 C++ 中很蠢也請不要扁我 orz
--
Les grandes et les meilleurs tone from "Zadok the Priest"
Eine grosse stattliche Veranstaltung by F. Handel
THE MAIN EVENT! These are the men
Sie sind die Besten
"Champions League" by Tony Britten THESE ARE THE CHAMPIONS!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.81.146
推
10/12 07:41, , 1F
10/12 07:41, 1F
→
10/12 08:47, , 2F
10/12 08:47, 2F
推
10/12 08:56, , 3F
10/12 08:56, 3F
推
10/12 09:56, , 4F
10/12 09:56, 4F
→
10/12 09:57, , 5F
10/12 09:57, 5F
→
10/12 09:57, , 6F
10/12 09:57, 6F
→
10/12 09:58, , 7F
10/12 09:58, 7F
→
10/12 18:03, , 8F
10/12 18:03, 8F
→
10/12 18:03, , 9F
10/12 18:03, 9F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章