When used for serialize the shared pointer, memory leak occurs. I am not sure that is due to the internal bug or the wrong use of serialization library. The following is test code: ============================================================================ ====== #include <iostream> #include <cstddef> #include <fstream> #include <string> #include <cstdio> #include <boost/config.hpp> #include <boost/archive/tmpdir.hpp> #include <boost/archive/text_oarchive.hpp> #include <boost/archive/text_iarchive.hpp> #include <boost/serialization/shared_ptr.hpp> class A{ private: friend class boost::serialization::access; int x; template<class Archive> void serialize(Archive& ar, const unsigned int /* file version */) { ar & x; } public: static int count; A(){++count; std::cout<<"A ctor"<<std::endl;} virtual ~A(){--count;std::cout<<"A dtro"<<std::endl;} }; int A::count = 0; int main(int /* argc */, char /*argv[] */){ std::string filename(boost::archive::tmpdir()); filename += "/testfile"; boost::shared_ptr<A> spa(new A); { std::ofstream ofs(filename.c_str()); boost::archive::text_oarchive oa(ofs); oa << spa; } spa.reset(); { std::ifstream ifs(filename.c_str()); boost::archive::text_iarchive ia(ifs); ia >> spa; } spa.reset(); std::cout << std::endl; return 0; } ============================================================================ ====== The output is: A ctor A dtor A ctor Valgrind report memory leak of 8 bytes, just the size of class A.