我在嘗試解決C++中的指針問題時遇到了一些困難。是否有一個獨特的指針指向共享指針的做法?
比方說,我有一個叫MyClass
的課。在這個課堂內部,有一個共享指針指向一些名爲MyResource
的外部資源。現在我們還要說在MyClass
之內,有一個對象叫做MyObject
的幾個實例。 MyObject
的每個實例也需要參考MyResource
。讓我們假設這個類並沒有做任何東西,除了包含我剛纔提到
class MyClass
{
shared_ptr<MyResource> m_p_my_resource;
MyObject m_my_object1;
MyObject m_my_object2;
MyObject m_my_object3;
}
如何我以前(試圖)來實現此這些成分,我想創建一個共享指針,並給它m_p_my_resource
。然後,我會給 MyObject
的每個實例。我認爲,無論何時m_p_my_resource
更改爲指向新的MyResource
,每個MyObject
s也會指向新資源。
但是,我意識到我所做的是不正確的。當我改變m_p_my_resource
時,這確實會指向一個新的資源。但是,每個MyObject
實例仍然會指向原始的MyResource
。
現在我試圖想想如何實際執行我最初試圖做的方法:能夠更改m_p_my_resource
並讓每個實例也指向新資源。
解決此問題的一種方法是更新MyObject
的每個實例,只要m_p_my_resource
發生更改。我可能需要有一個setResource
方法,它會更新m_p_my_resource
,然後遍歷每個MyObject
的實例。
另一種解決方案是讓MyObject
的每個實例都包含指向MyResource
的指針。因此,如果每個MyObject
都指向一個指向資源的指針而不是資源本身,我可以更改m_p_my_resource
,每個對象也可以確定新的資源。
雖然第二種方法可能適用於上面列出的類示例,但對於不包含在類中的MyObject
實例並不是很好。因爲如果我簡單地在棧上創建了一個MyObject
,我寧願讓它直接指向資源,而不是指向某個指向資源的中間指針...
所以我試圖以確定實施我所描述的最佳方法。我對智能指針還是比較陌生的,我很好奇,如果我想要做的是愚蠢的,或者如果有更好的/明顯的替代解決方案。
第一個解決方案是這樣做的正確的方式OO。它確保適當的封裝,並保持每個數據結構不偶然(假設'MyResource'是不可變的)。 – sbabbi