Boost logo

Boost Users :

From: Anders Sundman (anders.sundman_at_[hidden])
Date: 2007-02-03 10:26:48


Hi!

Is it possible to serialize a class A by pointer using a custom
allocator? (Not the custom in-place allocator approach).

I'm trying to serialize the (OpenCV) class IplImage. The class is used
like this:

IplImage* img = cvCreateImage(...);
...
cvReleaseImage(&img);

I've tried the following:

template<class Archive>
inline void load_construct_data(Archive & ar, IplImage * img, const
unsigned int file_version){
   ...
   IplImage* tmpImg = cvCreateImage(...);
   memcpy(img, tmpImg, sizeof(IplImage));
}

But I get exceptions later, when releasing the loaded image. As far as I
can tell, the image class data is identical before and after
serialization, so I guess that the cvCreateImage/cvReleaseImage keep
track of pointers somehow and things go bad when the ReleaseImage is
called by a pointer not returned by the CreateImage function?

Can the allocation of the IplImage used as input to load_construct_data
be customized somehow?

I also tried using an IplImage * & as input to load_construct_data:

template<class Archive>
inline void load_construct_data(Archive & ar, _IplImage * & img, const
unsigned int file_version){
   _IplImage* tmpImg = cvCreateImage(...);
   delete img;
   img = tmpImg;
}

But that screws up the (de)serialization.

Any suggestions or thoughts anyone?

// Anders Sundman


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net