2011-08-22 79 views
2

我想離開MFC,我怎麼能取代CPtrArrayCPtrArray沒有MFC(STL或升壓)

也許我可以的typedef它的東西都vector<void *>

什麼是更好的方式來保存完整的功能這個類的?

謝謝。

回答

2

不需要自己寫,你可以用boost::ptr_array代替。它使用底層std::vector<void*>來存儲指針。

5

您不應該首先使用CPtrArray。從Visual C++支持模板開始之前的黑暗時代開始,這是一個危險的老課程,只能非常小心地使用它。它的問題是它存儲指針(任何指針!)爲void*,這意味着當你將指針從數組中取出時,你有沒有任何類型的信息。如果你的代碼在很大程度上依賴於這個,你就有可能濫用對象和嚴重的內存泄漏(例如未能調用析構函數)。

boost::ptr_array不是CPtrArray的直接替代品,它是一個正確的模板類型敏感類:它最近的MFC相當於將CArray<T>。它使用void*來處理指針的事實(實質上)是一個實現細節,而不是直接使用vector<void*>

(如果你知道的所有CPtrArray然後我的說教合唱團道歉的問題,但我認爲任何問題有關CPtrArray需要一個警示說明附後。)