2013-07-15 68 views
0

那裏的專業人員,使用智能指針在C++中的「觀察者模式」?

這是我第一次向這個董事會發佈一個問題,這個問題在過去幫了我很多。我仍然是編程新手,並且在過去幾個月裏一直在努力學習很多關於編程軟件開發的知識。

我最近解決了「C++ 11-Smart Pointers」這個主題,並決定重寫前幾周我學到的所有設計模式,包括使用shared_ptr & weak_ptr進行資源管理的「Observer Pattern」。

當我試圖編寫一個簡單的觀察者模式的實現時(比如在頭部的設計模式或E.Gamma的設計模式中),對於可觀察主體和觀察者都使用接口類,每個具體類,我收到來自Visual Studio的各種錯誤消息。 我只是不明白如何結合shared_ptr和weak_ptr在這種模式,這可能是由於我還沒有完全理解這兩者的組合。

可惜的是,甚至在互聯網上徹底搜查沒有提供給我,可以作爲我的一個方向的「使用智能指針觀察者模式」的一個簡單的例子。

所以我在想,如果你們中的一個人會知道在哪裏可以找到這樣一個簡單的implmentation或會這麼好心給我提供你自己的。無論是:-)

非常感謝

coderAndi

+2

也許我們可以幫助您與您approcah如果你告訴我們,你的努力實現該模式,你遇到了錯誤。簡而言之:迄今爲止你嘗試過什麼? –

+2

@ArneMertz他正在倒退:在定義問題之前選擇解決方案(智能指針)。事實上,觀察者模式是智能指針不適用時設計的一個主要示例。 –

+0

您可以將Observer-> Observable連接看作資源並使用智能指針來管理該資源。但我認爲這不是他想要的;-) –

回答

3

觀察者模式就是智能 指針(至少是平時的候選人)是不合適的情況下的一個典型例子真的很有幫助。 主體和對象都不相互擁有;每個都有其自己的使用壽命 。事實上,一個經常使用觀察者 模式是當一個對象有一個指針,該 不屬於它的另一個對象。它註冊爲觀察者,以便在觀察對象被破壞時通知 。

這聽起來像你對我正在攻擊整個事情 倒退。你有一個解決方案(智能指針),你試圖讓每個問題都適合它。這從來沒有工作。

+0

感謝您的即時回覆:-) 我已經擔心我無法找到任何匹配示例的原因是您通常不會將shared_ptr&weak_ptr與觀察者模式一起使用。 其實我真的試過在我以前使用過的原始指針的地方使用智能指針,因爲迄今爲止我讀過的書給我的印象是沒問題的,只要我遵循一些規則... – CoderAndi

+1

@CoderAndi它是不。智能指針是一個有用的工具,但它們並不普遍適用。他們在特定情況下解決了一個特定的問題,但在大多數應用中,大多數指針將純粹用於導航,應該是生硬的指針。 –

+0

@CoderAndi試圖實現一個模式不是一個非常有用的練習。當真正的代碼遇到問題時,你可以真正地只學習一種模式,可以通過使用模式來簡化,而不是相反。對於觀察者模式的一個真實例子,請參閱'boost :: signal',並且您不會在那裏找到任何shared_ptr。 – yngccc