還有的一點從檔案---->記憶體--------->物件的恢復 沒有建構函式的呼叫 ,這一點很神奇 。。。
我們成功的恢復了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 ...