2010-11-08 83 views
2

我序列化併發送一個對象的原始指針到另一個應用程序。Boost:序列化:誰清除了反序列化的數據?

當反序列化我得到另一個原始指針。這意味着Boost :: Serialization在內部構造這個指針背後的對象。我現在好奇誰擁有對象的所有權,如果Boost將刪除該對象,如果它不再需要。

一些代碼,也許更能說明問題的是什麼:

void anyMethod() 
{ 
    std::ifstream file("archiv.txt"); 
    boost::archive::text_iarchive ia(file); 
    AnyClass* object; 
    ia >> object; 
    //work with object 
} 

//Now what has happened to object? 
//Is it deleted, cause it went out of scope? 
//Do I have to delete it myself? 
+0

你可能需要清理自己。一般來說C++是非常重要的,如果你想花費時間完成某件事情,明確地說你想花費時間。 – thecoshman 2010-11-08 07:29:17

回答

3

我對documentation關於指針序列化的理解是歸檔保留了所有權:「多次加載同一個指針對象導致只創建一個對象,從而複製原始指針配置」。這往往表明圖書館處理簿記。

此外,存檔還提供了一個delete_created_pointers方法:「刪除所有通過加載指針創建的對象,這可以用來避免在指針正在加載並且存檔加載遇到異常時可能發生的內存泄漏。

+0

非常感謝,這正是我一直在尋找的地方 – MOnsDaR 2010-11-08 08:44:03

0

我不明白爲什麼AnyClass* object;是法律在這方面,海事組織,你必須有AnyClass對象(請看http://en.highscore.de/cpp/boost/serialization.html),那麼重複使用它。現在,當這個對象(不是指針)超出範圍時,它將被刪除。

+2

Boost :: Serialization也可以去/序列化指針,這在進行多態串行化時非常重要。 – MOnsDaR 2010-11-08 08:42:33

0

對不起回答這個老問題。 我試過了demo,發現它有內存泄漏。演示將檔案恢復到一個函數中的一個對象(內部使用指針)。當函數返回時,歸檔被破壞,並返回對象。分配的內存不被任何人清理。我修改了演示程序以多次運行恢復功能,然後發現該過程花費了越來越多的內存。因此,如果您需要清理分配的內存,請通過指針手動刪除對象,或者調用delete_created_pointers()。