Dear Sirs,
Does anyone have a working example of serialization of shared_ptrs with
non-default deleter and factory construction as described in
http://www.boost.org/libs/smart_ptr/sp_techniques.html#preventing_delete ?
The code below (correctly) triggers error in boost/checked_delete.hpp
because the destructor of class X is private.
#include <iostream>
#include <fstream>
#include
#include
#include
#include
#include
class X
{
private:
~X();
class deleter;
friend class deleter;
class deleter
{
public:
void operator()(X * p) { delete p; }
};
friend class boost::serialization::access;
template< typename Archive >
void serialize(Archive & ar, const unsigned int version)
{
ar & some_data;
}
public:
static boost::shared_ptr<X> create()
{
boost::shared_ptr<X> px(new X, X::deleter());
return px;
}
int some_data;
};
inline std::ostream& operator<<( std::ostream& os, const X& x )
{
return os << "x = " << x.some_data << std::endl;
}
using namespace std;
int main ( int argc, char* argv[] )
{
boost::shared_ptr<X> x = X::create();
x->some_data = 1;
cout << *x;
std::ofstream ofs("filename");
boost::archive::text_oarchive oa(ofs);
oa & x;
ofs.close();
std::ifstream ifs("filename", std::ios::binary);
boost::archive::text_iarchive ia(ifs);
x->some_data = 3;
cout << *x;
ia & x;
cout << *x;
}
I'm using boost 1.33.1 and gcc 4.0.1 on linux.
Any help on this is greatly appreciated.
Thanking in advance,
Mikko Vainio
--
:: Mikko Vainio tel + 358 2 215 4600
:: Structural Bioinformatics Laboratory
:: Department of Biochemistry and Pharmacy
:: Abo Akademi University, Tykistokatu 6A, FI-20520 Turku Finland