Các nhà thầu di chuyển nói chung có được phép ném không? Vâng. Có nên không? Số
Nói chung, không có gì bạn làm trong đó phải là bất cứ thứ gì có thể ném. Bạn không nên cấp phát bộ nhớ, gọi mã khác hoặc bất kỳ thứ gì như thế. Lý do duy nhất để viết một hàm tạo di chuyển là bỏ qua con trỏ bộ nhớ của người khác và tham chiếu đối tượng. Bạn nên sao chép một vài loại cơ bản và vô hiệu hóa các giá trị trong đối tượng khác. Những thứ đó không nên ném.
Vì vậy, trong khi nó được cho phép, nó không phải là một ý tưởng tốt. Nếu bạn đang làm điều đó, hãy suy nghĩ lại những gì bạn đang làm trong các hoạt động di chuyển của bạn.
Nguồn
2012-02-12 17:05:42
Tôi không thấy gì trong tiêu chuẩn về việc di chuyển các nhà thầu không được phép ném, nhưng tôi đã thấy rằng "Trình xây dựng di chuyển được khai báo ngầm cho lớp X sẽ có dạng ' X :: X (X &&) ' ", và tôi không thấy 'noexcept' trong đó. –
Trong bản nháp cuối cùng, tôi không thấy 'noexcept' được khai báo cho bất kỳ chức năng nào ... – ronag
@ronag: Bạn có chắc chắn bạn đang tìm kiếm không? Bởi vì tôi đã mở N3337 và chỉ tìm kiếm "' noexcept' "và ngay lập tức có chức năng' swap' của lớp nào đó. –