rgheck wrote:
So, here's the deal with 5010. As noted before, DocumentClass objects
get created via new() whenever makeDocumentClass() is called. This
happens whenever a BufferParams object is created, which was the
original problem: Such objects were getting created in the undo stuff.
Now they're not. But they get created for other strange reasons, such
as in putClipboard(), where we find this code:
void putClipboard(ParagraphList const & paragraphs,
DocumentClass const * const docclass, docstring const & plaintext)
{
// For some strange reason gcc 3.2 and 3.3 do not accept
// Buffer buffer(string(), false);
Buffer buffer("", false);
buffer.setUnnamed(true);
buffer.paragraphs() = paragraphs;
buffer.params().setDocumentClass(docclass);
ostringstream lyx;
if (buffer.write(lyx))
theClipboard().put(lyx.str(), plaintext);
else
theClipboard().put(string(), plaintext);
}
Right here, a possible solution would be to make the Buffer static:
We'd lose a bit of memory that way, but not a ton, and it'd save
having to recreate it all the time, anyway. Since we'd only create the
BufferParams once, then we wouldn't create tons of DocumentClass
objects, so nothing leaks.
I think that is fine.
That said, this is just one problem, and there may be others. A more
general solution would be to use some kind of shared pointer here. I
was trying to avoid doing so, and that's why I was using
DocumentClassBundle, but maybe at this point we should just go with
boost::shared_ptr.
We'll think again about those issues in 1.7 (with a possible backport to
1.6.x).
Abdel.