码迷,mamicode.com
首页 > 编程语言 > 详细

将c++对象保存到共享内存上

时间:2020-01-13 16:12:13      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:amp   指针变量   mod   虚函数   sum   strong   ++   调用   重启   

     将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中。

将c++对象保存到共享内存上

标签:amp   指针变量   mod   虚函数   sum   strong   ++   调用   重启   

原文地址:https://www.cnblogs.com/redman274/p/12187367.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
分享档案
周排行
mamicode.com排行更多图片
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!