我打算做的事情:我有一個自己的容器結構。但是它不應該存儲所有元素,而只能存儲一些具有特殊屬性的元素,而其他元素可以從結構中的信息動態創建。過載[]複雜數據結構的C++操作符
因此,我有一個插入(ITEM * i)方法,用於檢查是否需要明確存儲,然後存儲到地圖中,還是可以動態重構它。然後只存儲該項目添加的信息。
同爲一個項目*獲取(項目索引IDX)方法。它檢查是否明確存儲了屬於idx的ITEM。如果是,則從內部映射中讀取並返回指針。如果它已註冊但隱式存儲,則ITEM將動態創建並返回。
爲了與代碼中的其他結構兼容,我計劃重載[]運算符,但我不知道如何處理這個問題,或者如果這對於這個更復雜的結構甚至是可能的。
是否有可能,如果是的話,怎麼樣? 在此先感謝!
更新 尼姆代碼的作品。但是我現在認識到了一個問題(儘管從一開始就很明顯......):如果get()找到一個條目,則該指針由[]返回。如果沒有存儲,則ITEM被構造並返回指針。但是RAM永遠不會被釋放,因爲使用容器的算法無法區分保存構造的ITEMS和刪除第二種。
我會想象最簡單的方法是爲'operator []'返回'get(index)'。 – Nim
嗨Nim, 是的,這似乎工作。但是我現在認識到了一個問題(雖然很明顯......):如果get找到一個條目,返回指針。如果沒有,則構造ITEM並返回指針。但是RAM永遠不會被釋放,因爲使用容器的算法無法區分保存構造的ITEMS和刪除第二種。 – user3572032
@ user3572032你有沒有考慮過使用智能指針而不是裸指針?即。的unique_ptr <>。 – marcinj