我有以下問題。成員指針或引用參數?
我得到了一個類PluginLoader
,它負責監視插件的加載。它將工作的子階段劃分爲其他類,如Plugin
。 Plugin
在其處理中調用PluginLoader
的功能。我們稱之爲AddData
。在這裏,PluginLoader
必須檢查它收到的數據是否重複。爲此,它使用ConflictResolver
類。現在,我的問題是如何將ConflictResolver
的對象提供給PluginLoader
。有三種方式我看到這一點。
- 使用
ConflictResolverFactory
類和PluginLoader
創造ConflictResolver
的對象。 - 將構造的
ConflictResolver*
通過其構造函數或成員函數SetConflictResolver
傳遞給PluginLoader
,並將其存儲在成員變量中並稍後使用。這兩種方式都有缺點。如果我在構造函數中傳遞它,如果指針是NULL
,我將不得不拋出。我不能使用例外,因爲它是這裏的習慣。如果我通過SetConflictResolver
傳遞它,我不能保證該函數實際上將被用戶調用。或者我必須檢查我使用它的每個地方的會員ConflictResolver*
是否爲NULL
。 - 通過
ConflictResolver &
到PluginLoader
sLoad
方法將完成所有的工作。反過來,Plugin
s Load方法也必須接受ConflictResolver &
(儘管它沒有用處),並將其傳回到AddData
,其中PluginLoader
將能夠使用它。
第三種方法比第二種方法更安全。但是,即使不使用它,我也必須傳遞參考。
如果第一種方法不能使用,那麼最好的方法是什麼?
對牆的道歉:wq!
是否會有不同類型的'ConflictResolver'? – 2010-10-20 12:19:14
某些頂級代碼是否調用'PluginLoader :: Load()',調用'Plugin :: Load()',調用'PluginLoader :: AddData()',調用'ConflictResolver'中的某些方法? – 2010-10-20 12:20:37
對上述兩者都是:) – nakiya 2010-10-20 12:24:08