將C++對象保存到共享內存上


     將C++對象保存到共享內存上時,由於程序DWON掉或者其他原因停掉程序(不清除共享內存)重新拉起程序時,共享內存上C++對象的虛函數指針已經失效。為了使得不清除共享內存重啟程序時C++對象仍然有效,需要恢復共享內存上C++對象的虛函數表,通過C++的placement new可以做到。

     假設 void *pShmDataAddr是掛載后的共享內存地址,TData是存放的C++對象,共享內存上總共存放了MAX_OBJ_NUM個對象。具體做法如下。

當程序啟動的時候執行操作:

    TData *pShmDataAddr = (TData *)pShmDataAddr;

    for (int i=0; i<MAX_OBJ_NUM; ++i)

    {

          TData *pData = new(&pShmDataAddr[i])TData();

          if (INIT_MODE ==  mode)

         {

              // 初次創建共享內存

              pData->Init();

         }

         else if (RESUME_MODE == mode)

          {

               // 未清共享內存拉起程序

               pData->Resume();

           }

     }

      在這種方式下,注意TData構造函數不應該進行對象創建時的初始化操作(因為恢復共享內存中C++對象時也會調用TData構造函數),而應該將初始化操作放在成員函數Init中。未清共享內存拉起程序時的指針變量等的恢復則放在成員函數Resume中。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM