vfptr的困扰:保存c++类遇到的问题

今天遇到一个问题,在保存physx的NxShapeDesc时正常,但是load后,出现异常。

 

//保存时正常

save( &ShapeDesc, sizeof(NxShapeDesc) )

 

//读取时,vfptr被覆盖,再传递给NxScene创建actor后就会出错

load( &ShapeDesc, sizeof(NxShapeDesc) )

 

原来是NxShapeDesc使用了虚函数,c++编译器使用一个vfptr保存虚函数的列表,并且总是放在内存的第一个。

 

这样问题就简单了:只要在load之前保存vfptr的值,load后在改回去就行了

 

NxBoxShapeDesc *nbsDesc = new NxBoxShapeDesc(); int *tempaddress = (int*)nbsDesc; int tempvalue = *tempaddress; read( nbsDesc, sizeof(NxBoxShapeDesc) ); *tempaddress = tempvalue;

你可能感兴趣的:(杂项)