
On Dec 4, 2007 11:18 AM, Hervé Brönnimann <hervebronnimann@mac.com> wrote:
text_iarchive_impl<Archive>::load(std::string &s) { std::size_t size; * this->This() >> size; // skip separating space is.get(); // borland de-allocator fixup #if BOOST_WORKAROUND(_RWSTD_VER, BOOST_TESTED_AT(20101)) if(NULL != s.data()) #endif + s = std::string(); s.resize(size); is.read(const_cast<char *>(s.data()), size); // <== This looks suspect }
Compared to Corrado's implementation, it's almost the same, but frees up resources earlier. You may actually be able to reuse the same block of memory for the resize() that you just freed.
This doesn't enforce strong exception safety. My solution either modified the string with the deserialized value, or it kept the original value. This one may leave the string empty. Corrado
HTH, -- Hervé Brönnimann hervebronnimann@mac.com _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
-- __________________________________________________________________________ dott. Corrado Zoccolo mailto:zoccolo@di.unipi.it PhD - Department of Computer Science - University of Pisa, Italy -------------------------------------------------------------------------- The self-confidence of a warrior is not the self-confidence of the average man. The average man seeks certainty in the eyes of the onlooker and calls that self-confidence. The warrior seeks impeccability in his own eyes and calls that humbleness. Tales of Power - C. Castaneda