2010-11-04 151 views
2

Boost :: Serialization對內部支持boost::shared_ptr<>Boost序列化 - 序列化std :: tr1 :: shared_ptr?

有沒有辦法使用這種支持std::tr1::shared_ptr<>呢?
是否有可能從std::tr1::shared_ptr<>轉換到boost::shared_ptr<>

+0

如果你可以使用boost,爲什麼不首先使用'boost :: shared_ptr'呢? – ereOn 2010-11-04 07:34:54

+2

導致接口獨立於升壓。使用boost :: serialization來序列化類只是一個實現細節。如果後來另一個開發人員決定使用另一個實現進行序列化,該項目仍然依賴於提升。 – MOnsDaR 2010-11-04 07:42:13

+0

爲什麼不只是使用'typedef boost :: shared_ptr MySharedPtr',所以你的代碼實際上不是依賴於boost的,而是依賴於typedef的。您可以在將來更改序列化庫和typedefs。 – 2011-02-09 16:03:07

回答

3

由於實現的不同,鑄造將不可能。同樣,使用另一個shared_ptr類型的get()返回的值創建一個shared_ptr類型的實例將無法正常工作,因爲引用計數將在您的代碼中的不同點處變爲0,從而導致刪除最後一個對象使用它。 我不是boost :: serialization的專家,但由於std :: tr1 :: shared_ptr和boost :: shared_ptr <>的接口幾乎完全相同,所以很可能您只需克隆序列化/反序列化代碼boost :: shared_ptr <>,只需要替換shared_ptr的命名空間。