2010-10-20 65 views
0

我有以下問題。成員指針或引用參數?

我得到了一個類PluginLoader,它負責監視插件的加載。它將工作的子階段劃分爲其他類,如PluginPlugin在其處理中調用PluginLoader的功能。我們稱之爲AddData。在這裏,PluginLoader必須檢查它收到的數據是否重複。爲此,它使用ConflictResolver類。現在,我的問題是如何將ConflictResolver的對象提供給PluginLoader。有三種方式我看到這一點。

  1. 使用ConflictResolverFactory類和PluginLoader創造ConflictResolver的對象。
  2. 將構造的ConflictResolver*通過其構造函數或成員函數SetConflictResolver傳遞給PluginLoader,並將其存儲在成員變量中並稍後使用。這兩種方式都有缺點。如果我在構造函數中傳遞它,如果指針是NULL,我將不得不拋出。我不能使用例外,因爲它是這裏的習慣。如果我通過SetConflictResolver傳遞它,我不能保證該函數實際上將被用戶調用。或者我必須檢查我使用它的每個地方的會員ConflictResolver*是否爲NULL
  3. 通過ConflictResolver &PluginLoader s Load方法將完成所有的工作。反過來,Plugin s Load方法也必須接受ConflictResolver &(儘管它沒有用處),並將其傳回到AddData,其中PluginLoader將能夠使用它。

第三種方法比第二種方法更安全。但是,即使不使用它,我也必須傳遞參考。

如果第一種方法不能使用,那麼最好的方法是什麼?

對牆的道歉:wq!

+0

是否會有不同類型的'ConflictResolver'? – 2010-10-20 12:19:14

+0

某些頂級代碼是否調用'PluginLoader :: Load()',調用'Plugin :: Load()',調用'PluginLoader :: AddData()',調用'ConflictResolver'中的某些方法? – 2010-10-20 12:20:37

+0

對上述兩者都是:) – nakiya 2010-10-20 12:24:08

回答

1

您可以將ConflictResolver &傳遞給PluginLoader構造函數。您現在可以保證該對象不爲空。

+0

:S。並存儲它的指針? :S:S:S:S:S – nakiya 2010-10-20 12:26:13

+1

不,存儲參考。你可以聲明成員變量是引用。 – 2010-10-20 12:31:07