serialization of shared_ptrs with non-default deleter and factory construction

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 <boost/archive/text_oarchive.hpp> #include <boost/archive/text_iarchive.hpp> #include <boost/serialization/export.hpp> #include <boost/serialization/shared_ptr.hpp> #include <boost/shared_ptr.hpp> 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 <mikko.vainio@abo.fi> tel + 358 2 215 4600 :: Structural Bioinformatics Laboratory :: Department of Biochemistry and Pharmacy :: Abo Akademi University, Tykistokatu 6A, FI-20520 Turku Finland
participants (1)
-
Mikko Vainio