我偶然發現了一些我無法弄清楚的東西,所以我想我在更大的C++圖片中丟失了一些東西。確保指針不被刪除
總之,我的問題是:如何在一個類中保留一個可變的,不可刪除的,可能是NULL的對象實例。
較長的版本是:
我有以下情形:一堆類(我可以稍微改變,但沒有徹底重構),其中大部分需要使用的對象。這個對象雖然可變,但由其他人管理,所以不能刪除。
一些類中的一些類不需要這樣的對象 - 它們重用其他類中的代碼,但通過提供給這些類的可用參數可以保證,即使提供了對象,它也不會被使用。
當前實現使用指向const對象(const Obj *
)。這反過來又意味着所有對象的方法必須是const的,而且大多數的字段都是可變的。這是一個混亂的解決方案,因爲聲明爲mutable
的字段可用於檢查(與C++ lite條目here完全相反)。它也只部分地解決了「不要刪除這個在這裏」的問題(編譯器不會抱怨,但在對象前面的const
是一個指示)。
如果我用了一個參考這個對象,我會迫使一些來電者創建一個「虛擬」的對象,並提供給他們實例化類。這也是一團糟,除了浪費資源。由於項目限制,我無法創建一個全局對象來代表「NULL」引用。
我覺得引用是我需要的工具,但是我不能重構涉及的類到這樣的程度,以至於讓對象從不使用它的實現中消失(它可以完成,但它不是簡單,它不會很快)。所以我想實現一些簡單的東西,如果有人試圖濫用這個對象,只會畫出一個警報信號,但會讓我的對象變爲可變的。
我能想到的最佳解決方案是使用常量指針到對象(Obj * const
) - 這不會使編譯器抱怨,但我有我的可變對象和一種警報信號 - 通過const
- 以及。
有沒有人有更好的主意?
我認爲這可能會起作用,而且看起來很簡單,我需要查看weak_ptr api以查看如何實現。 – laura 2009-11-10 13:49:01
我已經接受了這個答案:這是一個介於這個和自己的包裝之間的過程,但有時候最好相信已建立的庫,而不是編寫自己的代碼。 – laura 2009-11-10 17:44:35