Normally, this would be optimised to not involve copying the large value (since a std::vector
has move semantics enabled):
std::vector<int> makeABigThing(){
std::vector<int> large_thing(1000, 0);
return large_thing;
}
Can this also be optimised in the same way if the function is a virtual method:
struct Foo{
virtual std::vector<int> makeABigThing(){
std::vector<int> large_thing(1000, 0);
return large_thing;
}
};
i.e., do move semantics work with even when the called function is selected at runtime?
makeABigThing()
IS guaranteed to not involve avector
copy constructor. – Remorseless