From: Warren Young Date: September 4 2007 12:16pm Subject: Re: std::vector of mysqlpp::Row List-Archive: http://lists.mysql.com/plusplus/6986 Message-Id: <46DD4C99.4040409@etr-usa.com> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Yassin wrote: >> In MySQL++ v2.3, the Result object must outlive the Row objects that >> come from it, but with storein(), the Result object only lasts as long >> as the storein() call. > > Can you explain me why? MySQL++ is open source, and its code is pretty easy to read these days. Hint, hint. If you had looked for references to Result in lib/row.cpp, you would have found that there are several places where calling a method on a Row delegates part of the function back to the Result object that created it. This was done for efficiency and simplicity: why make each Row carry extra copies of data its parent Result holds when it can just keep a pointer back to its parent and ask it when it needs the info? The new Row code in v3.0 gets around this without a huge speed and space penalty by using a much more complex memory management scheme. (See recent posts to the list about reference counted smart pointers.) If I were the original authors of MySQL++, I wouldn't have wanted to make the memory management complex at such an early stage of development, either. It's only a sign of the increasing maturity of MySQL++ that we can do such things.