On Thu, Jul 21, 2011 at 4:26 PM, cc caprani
<smacks forehead> Oh that could have nearly been embarrassing!
Luckily I had actually done that in a previous test - the problem still remains when scoped correctly as suggested.
Thanks for the input Maxine. <- apologies, Maxime.
After some more work on it, I realize that some of the leaks were incorrectly reported by _CrtDumpMemoryLeaks(); as the BOOST_CLASS_EXPORT is only tidied up as the program exits. The very last comment on this page is key: http://msdn.microsoft.com/en-us/library/e5ewb1h3%28v=vs.80%29.aspx. This very simple program still leaks one copy of everything loaded from the archive. The new main() for the previously posted code with improved leak detection is: int main() { _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); // the file to read/save from/to std::string file = "archive.xml"; // make some Parmeters std::vector<ParameterPtr> vParam; vParam.push_back( boost::make_shared<Parameter>(1,1) ); vParam.push_back( boost::make_shared<Parameter>(2,2) ); // display for checking for(unsigned int i = 0; i != vParam.size(); ++i) std::cout << "P: " << vParam.at(i)->getDist()->getType() << std::endl; // save the file std::cout << "Writing..." << std::endl; save(vParam,file); // clear it vParam.clear(); // read the file std::cout << "Reading..." << std::endl; load(vParam,file); // display for checking for(unsigned int i = 0; i != vParam.size(); ++i) std::cout << "P: " << vParam.at(i)->getDist()->getType() << std::endl; std::cin.get(); // hold console window open return 0; }