2
我知道代碼丟失(有人會給負數)。但我只想知道在這種情況下你如何解決建設者注入問題?構造函數注入
class PresenterFactory
{
public:
template<class TModel>
AbstractPresenter<TModel>*
GetFor(AbstractView<TModel> * view)
{
return new PresenterA(view, new FakeNavigator());
}
};
class ViewA : public AbstractView<ModelA>
{
static PresenterFactory factory;
public:
ViewA(AbstractPresenter<ModelA> *presenter = factory.GetFor<ModelA>(this)) :
AbstractView<ModelA> (presenter)
{
}
// this one is also not working
// invalid use of ‘class ViewA’
// ViewA()
// {
// this->ViewA(factory.GetFor<ModelA> (this));
// }
};
就是這樣。謝謝:) – 2009-10-15 19:52:52
有關'這'的優秀點。將'this'傳遞給基類並不總是不好的,但這是一個危險例子的好例子。傳入'GetFor'的基類子對象將被初始化,所以如果「PresenterA」的構造函數試圖讀取或修改'view'中的任何數據,那麼它將讀取垃圾,並且當構造函數寫入的東西很可能會丟失對於AstractView最終被調用。 –
2009-10-16 07:18:38
儘管有些編譯器會警告它,但在構造函數初始化程序列表中傳遞'this'是完全有效的。關鍵是它不應該被用在任何構造函數代碼中。但有時候這是必要的,例如將其傳遞到其他位置以初始化引用成員。 – Tom 2009-10-16 13:51:14