C++ Boost Serialization庫(kù)超詳細(xì)獎(jiǎng)金額
一、說(shuō)明
Boost.Serialization 也可以序列化指針和引用。因?yàn)橹羔槾鎯?chǔ)對(duì)象的地址,所以序列化地址沒(méi)有多大意義。當(dāng)序列化指針和引用時(shí),被引用的對(duì)象被序列化。
二、示例代碼
示例 64.8。序列化指針
#include <boost/archive/text_oarchive.hpp> #include <boost/archive/text_iarchive.hpp> #include <iostream> #include <sstream> std::stringstream ss; class animal { public: animal() = default; animal(int legs) : legs_{legs} {} int legs() const { return legs_; } private: friend class boost::serialization::access; template <typename Archive> void serialize(Archive &ar, const unsigned int version) { ar & legs_; } int legs_; }; void save() { boost::archive::text_oarchive oa{ss}; animal *a = new animal{4}; oa << a; std::cout << std::hex << a << '\n'; delete a; } void load() { boost::archive::text_iarchive ia{ss}; animal *a; ia >> a; std::cout << std::hex << a << '\n'; std::cout << std::dec << a->legs() << '\n'; delete a; } int main() { save(); load(); }
示例 64.8 使用 new 創(chuàng)建一個(gè)類(lèi)型為 animal 的新對(duì)象,并將其分配給指針 a。指針——不是*a——然后被序列化。 Boost.Serialization 自動(dòng)序列化 a 引用的對(duì)象而不是對(duì)象的地址。
如果存檔已恢復(fù),則 a 不一定包含相同的地址。創(chuàng)建一個(gè)新對(duì)象并將其地址分配給 a。 Boost.Serialization 只保證對(duì)象與序列化的對(duì)象相同,而不保證其地址相同。
因?yàn)橹悄苤羔樑c動(dòng)態(tài)分配的內(nèi)存結(jié)合使用,所以 Boost.Serialization 也提供了對(duì)它們的支持。
示例 64.9。序列化智能指針
#include <boost/archive/text_oarchive.hpp> #include <boost/archive/text_iarchive.hpp> #include <boost/serialization/scoped_ptr.hpp> #include <boost/scoped_ptr.hpp> #include <iostream> #include <sstream> using namespace boost::archive; std::stringstream ss; class animal { public: animal() = default; animal(int legs) : legs_{legs} {} int legs() const { return legs_; } private: friend class boost::serialization::access; template <typename Archive> void serialize(Archive &ar, const unsigned int version) { ar & legs_; } int legs_; }; void save() { text_oarchive oa{ss}; boost::scoped_ptr<animal> a{new animal{4}}; oa << a; } void load() { text_iarchive ia{ss}; boost::scoped_ptr<animal> a; ia >> a; std::cout << a->legs() << '\n'; } int main() { save(); load(); }
示例 64.9 使用智能指針 boost::scoped_ptr 來(lái)管理動(dòng)態(tài)分配的動(dòng)物類(lèi)型對(duì)象。包含頭文件 boost/serialization/scoped_ptr.hpp 以序列化此類(lèi)指針。要序列化 ??boost::shared_ptr 類(lèi)型的智能指針,請(qǐng)使用頭文件 boost/serialization/shared_ptr.hpp。
請(qǐng)注意,Boost.Serialization 尚未針對(duì) C++11 進(jìn)行更新。 Boost.Serialization 當(dāng)前不支持來(lái)自 C++11 標(biāo)準(zhǔn)庫(kù)的智能指針,如 std::shared_ptr 和 std::unique_ptr。
示例 64.10。序列化引用
#include <boost/archive/text_oarchive.hpp> #include <boost/archive/text_iarchive.hpp> #include <iostream> #include <sstream> using namespace boost::archive; std::stringstream ss; class animal { public: animal() = default; animal(int legs) : legs_{legs} {} int legs() const { return legs_; } private: friend class boost::serialization::access; template <typename Archive> void serialize(Archive &ar, const unsigned int version) { ar & legs_; } int legs_; }; void save() { text_oarchive oa{ss}; animal a{4}; animal &r = a; oa << r; } void load() { text_iarchive ia{ss}; animal a; animal &r = a; ia >> r; std::cout << r.legs() << '\n'; } int main() { save(); load(); }
Boost.Serialization 也可以毫無(wú)問(wèn)題地序列化引用(參見(jiàn)示例 64.10)。與指針一樣,引用的對(duì)象會(huì)自動(dòng)序列化。
到此這篇關(guān)于C++ Boost Serialization庫(kù)超詳細(xì)獎(jiǎng)金額的文章就介紹到這了,更多相關(guān)C++ Serialization內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++實(shí)踐IP地址類(lèi)項(xiàng)目參考
今天小編就為大家分享一篇關(guān)于C++實(shí)踐IP地址類(lèi)項(xiàng)目參考,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-02-02Qt數(shù)據(jù)庫(kù)應(yīng)用之通用數(shù)據(jù)庫(kù)同步
數(shù)據(jù)庫(kù)同步的主要功能是將本地的數(shù)據(jù)庫(kù)記錄同步到遠(yuǎn)程的數(shù)據(jù)庫(kù)。本文將利用Qt實(shí)現(xiàn)通用數(shù)據(jù)庫(kù)同步功能,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-03-03C++實(shí)現(xiàn)LeetCode(34.在有序數(shù)組中查找元素的第一個(gè)和最后一個(gè)位置)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(34.在有序數(shù)組中查找元素的第一個(gè)和最后一個(gè)位置),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07C語(yǔ)言Turbo C下實(shí)現(xiàn)俄羅斯方塊
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言Turbo C下寫(xiě)的俄羅斯方塊,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02統(tǒng)計(jì)C語(yǔ)言二叉樹(shù)中葉子結(jié)點(diǎn)個(gè)數(shù)
這篇文章主要介紹的是統(tǒng)計(jì)C語(yǔ)言二叉樹(shù)中葉子結(jié)點(diǎn)個(gè)數(shù),文章以C語(yǔ)言二叉樹(shù)中葉子結(jié)點(diǎn)為基礎(chǔ)分享一個(gè)簡(jiǎn)單小栗子講解,具有一定的知識(shí)參考價(jià)值,需要的小伙伴可以參考一下2022-02-02VS2022連接sqlserver數(shù)據(jù)庫(kù)教程
本文主要介紹了VS2022連接sqlserver數(shù)據(jù)庫(kù)教程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07淺談C語(yǔ)言編程中的布爾bool數(shù)據(jù)類(lèi)型
這篇文章主要介紹了C語(yǔ)言編程中的布爾bool數(shù)據(jù)類(lèi)型,bool并不是需要通過(guò)C++才能使用的,需要的朋友可以參考下2015-11-11C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的定時(shí)器
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的定時(shí)器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-10-10深入理解C++中的new/delete和malloc/free動(dòng)態(tài)內(nèi)存管理及區(qū)別介紹
這篇文章主要介紹了深入理解C++中的new/delete和malloc/free動(dòng)態(tài)內(nèi)存管理,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09