簡體   English   中英

boost serialize和std :: shared_ptr

[英]boost serialize and std::shared_ptr

我有一個以下領域的對象:

boost::unordered_map<std::string, std::shared_ptr<Foo> > m_liste_;

我想序列化它,但似乎std :: shared_ptr無法以簡單的方式序列化

誰有解決方案?

我懷疑你錯過了一個包含,

#include <boost/serialization/shared_ptr.hpp>

鏈接,在底部

此外,該示例使其看起來像混疊,並且默認情況下會處理循環。

_當然,擁有循環會導致shared_ptr潛在的內存泄漏與序列化無關,你仍然需要注意那些(通過避免循環或明智地使用weak_ptr)_

也可以看看:

不幸的是,答案是沒有一種簡單的方法可以將任何指針串行化,因為當你重新加載數據時,你的數據的內存布局可能會有所不同。一個能夠處理指針的串行器需要是非常聰明,並提出一個'內存布局'來保存到存儲結構中有有效指針地址的光盤,然后在結構被反序列化時重寫它們,以便指針指向正確的位置之后加載完成。

真正有趣的部分是,如果你允許可串行結構中的指針,你必須能夠處理循環參考圖。 此外, shared_ptr保留內部引用計數和記帳信息,以便它知道何時銷毀對象,因此序列化程序需要知道所有這些如何工作,以便正確記錄引用計數(並忽略來自shared_ptr對象的引用)不是在序列化的樹內,而是指向內部思考)。

基本上它是一個巨大的頭痛,這就是為什么序列化庫默認不這樣做的原因。 如果你想這樣做,你通常最終需要非常具體的自定義行為,因此他們會讓你實現它以確保它正確完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM