實現多種型別的序列化

2021-12-30 04:09:08 字數 1667 閱讀 6849

還有的一點從檔案---->記憶體--------->物件的恢復 沒有建構函式的呼叫 ,這一點很神奇 。。。

我們成功的恢復了2個物件但是卻沒有發生建構函式的呼叫...之所以我這種序列化方式能成功 ,肯定是在編譯器內部對於這種方式做了某種

支撐所以我說微軟mfc的序列化方式可能是這種方式。。。

#include

#include

#include

using  namespace std ;

class base

static base* loadobject(string file,int length) 

/** 構造器用做一些初始化操作

*/ base()

private:

/* *  暫存載入的物件,對於同乙個物件無論loadobject多少次 載入的永遠只是

*  返回的同乙份記憶體即同乙個物件,直到這個物件的宣告週期完畢,那麼再次載入會是不同的物件

*/  static base *tem_object;

};base * base::tem_object=null ;  //必須初始化靜態指標

//序列化類data

class data  :public base

void output()

} ;//序列化類myobject

class myobject :public base

~myobject()   

myobject showx()  //一段最簡單的**

private :

int x ;

}  ;

int main()

操蛋的是睡覺之前出bug了 ,明天要帶著bug裸考了 。。

bug1    同時序列化 2個以上的物件  如果序列化和反序列化放在一起了 就像下面的**

data *d=new data(43);

base::storeobject(d,file1,len1) ;

myobject *obj=new myobject(13) ;

base::storeobject(obj,file2,len2) ;

((data*)base::loadobject(file1,len1))->output() ;

((myobject*)base::loadobject(file2,len2))->showx()  ;  

發現data類的域中的x的值居然和myobject類的成員資料是一樣的 。。。 但是如果像下面這樣一次處理乙個 就不會有問題  。

data *d=new data(43);

base::storeobject(d,file1,len1) ;

((data*)base::loadobject(file1,len1))->output() ;

bug2     如果先呼叫如下

data *d=new data(43);

base::storeobject(d,file1,len1) ;

然後把上述**注釋掉,在呼叫如下,在從檔案載入 就會出現值的亂碼 

((data*)base::loadobject(file1,len1))->output() ;

相反的 如果一次性把序列化和反序列化寫在一起 ,那麼即使下次呼叫多次也不會出問題,,,

算了考完試再繼續debug吧...哪位願意幫忙除錯下。。。

PHP多種序列化 反序列化的方法

序列化是將變數轉換為可儲存或傳輸的字串的過程 反序列化就是在適當的時候把這個字串再轉化成原來的變數使用。這兩個過程結合起來,可以輕鬆地儲存和傳輸資料,使程式更具維護性。1.serialize和unserialize函式 這兩個是序列化和反序列化php中資料的常用函式。序列化陣列 s serializ...

PHP多種序列化 反序列化的方法

1.serialize和unserialize函式 serialize 函式,把複雜的資料型別壓縮到乙個字串中,把變數和它們的值編碼成文字形式,這有利於儲存或傳遞 php 的值,同時不丟失其型別和結構 unserialize 函式對單一的已序列化的變數進行操作,將其轉換回 php 的值 例 stoo...

PHP 多種序列化 反序列化的方式詳解

序列化是將變數裝換為可儲存或傳輸的字串的過程 反序列化就是在適當的時候把這個字串再轉化成原來的變數使用。這兩個過程結合起來,可以輕鬆地儲存和傳輸資料,使程式更具維護性。serialize 和 unserialize arr name 小明 age 21,country 中國 s serialize ...