我正在處理C++中的循環依賴問題。使用類模板的C++循環依賴 - 如何重構?
的情況如下所示:
libA.so:
- Body.cpp
- Header.cpp
- DataObject.cpp
- DataObject::read(boost::asio::streambuf* data)
{
boost::asio::streambuf data;
....
body = (new DataConverter<Body>)->convert(&data);
header = (new DataConverter<Header>)->convert(&data);
}
libB.so:
- DataConverter.cpp
-> DataConverter<T>
-> T* DataConverter<T>::convert(boost::asio::streambuf* data)
libA.so <-> libB.so
有一個循環依賴,因爲力霸從libB使用轉換器級和libB需要到現在的力霸的需要進行轉換的對象類型 - 因爲DataConverter :: convert返回一個Body或Header對象。
我想過用前向聲明來解決這個問題 - 但這對我來說似乎並不是最乾淨的解決方案。總而言之,我的計劃是提供可擴展的DataConverter解決方案。
你們會提出什麼樣的最佳做法?一個完整的不同的設計也歡迎:)
最佳, 塞巴斯蒂安
這看起來像內存泄漏給我 - 你幾乎可以肯定要'DataConverter
().convert(數據)',沒有'new'(除非'convert'以'delete this'結尾,但那會很可怕)。 –它比任何其他東西更僞代碼:) –