Opened 14 years ago
Last modified 10 years ago
#2319 new Bugs
function::operator= should "move", copy assignment should have by-value argument
Reported by: | niels_dekker | Owned by: | Douglas Gregor |
---|---|---|---|
Milestone: | Boost 1.37.0 | Component: | function |
Version: | Boost 1.36.0 | Severity: | Optimization |
Keywords: | Cc: | niels_dekker |
Description
A few days ago, I added a comment to ticket #1910 (regarding function::swap), suggesting to have boost::function's assignment operators calling its new move_assign member function, instead of calling swap. Doing so would significantly improve its performance.
Now I think that function::operator= deserves its own ticket, especially because the copy assignment of boost::function can be improved even more, by having its argument passed by value, instead of creating a copy of the argument inside the body of the function. Doing so would allow the compiler to do copy elision, when its argument is an rvalue. See also Improving the assignment operators of various Boost types
So please consider the attached patch.
Attachments (1)
Change History (3)
by , 14 years ago
Attachment: | function_assignment.patch added |
---|
comment:1 by , 14 years ago
Severity: | Problem → Optimization |
---|
Your patch adds memory leaks for cases, when function is already initialized with big functional object (move_assign member function does not call clean()).