avoid time-consuming copy construct