我繼承了一個最初用C編寫的大應用程序(但同時還增加了很多C++)。由於歷史原因,該應用程序包含很多無效指針。在你開始窒息之前,讓我解釋爲什麼這樣做。如何擺脫空指針
該應用程序包含許多不同的數據結構,但它們存儲在'通用'容器中。現在我會爲它使用模板化的STL容器,或者我會爲所有數據結構提供一個通用的基類,以便容器可以存儲指向基類的指針,但是在[良好]舊C日,唯一的解決方案是將結構指針轉換爲void指針。
此外,還有大量的代碼,在這些空隙指針工作,並且使用非常奇怪Ç結構中C.
我現在再加工中的應用,並試圖效仿多態性擺脫的空洞的指針。爲所有數據結構添加一個通用基類並不困難(工作幾天),但問題是代碼充滿了如下所示的構造。
這是數據是如何存儲的一個例子:
void storeData (int datatype, void *data); // function prototype
...
Customer *myCustomer = ...;
storeData (TYPE_CUSTOMER, myCustomer);
這是多麼數據的例子又是牽強:
Customer *myCustomer = (Customer *) fetchData (TYPE_CUSTOMER, key);
其實我是想取代所有的空隙指針與一些智能指針(引用計數),但我找不到自動化的技巧(或至少)幫助我擺脫所有指向void指針的指針。
有關如何查找,替換或以任何可能的方式與這些轉換進行交互的任何提示?
我真的相信這樣做不會自動做到這一點。一個接一個...... – INS 2010-06-11 21:01:34
存儲和獲取函數對'datatype'做什麼?他們是在對結構進行盲目複製還是僅僅存儲該空指針? – 2010-06-11 21:03:50
數據類型用於將所有相同數據類型的數據一起存儲,並對數據類型執行一些「通用」邏輯。如上所述,它模擬普通C中的多態性。 – Patrick 2010-06-11 21:13:23