Nils Krumnack wrote:
Hi all, At first glance, object tracking seems to be the way to go. If my strings were tracked, there would automatically be only one copy of each string. However I can't quite figure out how. I don't really want to change the global tracking behavior for std::string, since that might end up affecting code all over the place.
I was looking for something like that in the documentation, but wasn't very successful. Any ideas?
your instinct is correct. It's just that std::string is special - (its the only "special" type with respect to boost serialization). It is marked "primitive" so it will never be tracked. For you're situation the solution is to: a) make your own string type: struct my_string : public std::string { template<class Archive> void serialization(Archive & ar, const unsigned int version){ ar & base_objectstd::string(*this); } }; BOOST_SERIALIZATION_TRACKING(my_string, track_always). Now you have as special string that wil be the same is std::string except that this one will be tracked during serialization. Note that that keeps normal strings separate from these "special" strings so you don't have to worry about having wierd surprises in other parts of your executable. If a lot of your strings are duplicated, I think boot::flyweight might bear looking into. Robert Ramey