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)

function_assignment.patch (1.1 KB ) - added by niels_dekker 14 years ago.

Download all attachments as: .zip

Change History (3)

by niels_dekker, 14 years ago

Attachment: function_assignment.patch added

comment:1 by niels_dekker, 14 years ago

Severity: ProblemOptimization

comment:2 by Antony Polukhin, 10 years ago

Your patch adds memory leaks for cases, when function is already initialized with big functional object (move_assign member function does not call clean()).

Note: See TracTickets for help on using tickets.