ComplexObject foo()
{
ComplexObject temp;
//Do things with temp
ComplexObject result(temp, SOME_OTHER_SETTING); //1
//Do things with result. Do not use temp at all
return result; //2
}
ComplexObject foo()
{
ComplexObject temp;
//Do things with temp
ComplexObject result(std::move(temp), SOME_OTHER_SETTING); //1
//Do things with result. Do not use temp at all
return std::move(result); //2
}
với giả định rằng ComplexObject có một constructor di chuyển mà còn lâu mới hiệu quả hơn constructor sao chép nó.
Trình biên dịch có được phép chuyển đổi mã đầu tiên thành mã thứ hai một cách hiệu quả không, vì nó biết rằng không thể sử dụng ComplexObject cho phần còn lại của khối đó?
Ngoài ra, 'ComplexObject' có hàm hủy không tầm thường không? –
@BenVoigt: Giả sử nó chứa thứ gì đó như vectơ, vâng. –