Ah well... I think I might know why.
As you know, it uses memcpy to copy the object since you have to create a local object to modify due to the class not having an operator + (double val) overloaded operator. Allocating on the heap means it doesn't have to copy the array, I think.
That's the most logical explanation I can find. And it seems it can actually also optimize the memcpy call.