2012-06-12 43 views
6

Theo C++ chuẩn 11 một constructor di chuyển mặc định là chỉ tạo ra nếu:Rõ ràng mặc định constructor di chuyển

  • X không có một người dùng tuyên bố constructor sao chép, và
  • X không có sử dụng tuyên bố tử gán sao chép,
  • X không có một toán tử gán di chuyển do người dùng khai báo,
  • X không có một destructor do người dùng khai báo, và
  • các nhà xây dựng di chuyển sẽ không được định nghĩa ngầm đã xóa.

Tôi vẫn có thể mặc định rõ ràng không? Dường như hoạt động chính xác trong tiếng kêu vang. Như thế này ví dụ:

class MyClass { 
private: 
    std::vector<int> ints; 
public: 
    MyClass(MyClass const& other) : ints(other.ints) {} 
    MyClass(MyClass&& other) = default; 
}; 

Trả lời

10

Động lực cho quy tắc đó là nếu copy constructor mặc định không làm việc cho lớp học của bạn, sau đó rất có thể là các nhà xây dựng di chuyển mặc định sẽ không làm việc, hoặc (quy tắc 5, hoặc bất cứ điều gì chúng ta đang làm trong C++ 11). Vì vậy, có, bạn rõ ràng có thể mặc định nó, trên danh dự của bạn như là một lập trình viên rằng nó sẽ làm việc.

Trong mã ví dụ của bạn, thay vào đó bạn có thể xóa hàm tạo bản sao, vì nó giống như mặc định.

3

Có, bạn luôn có thể gọi rõ ràng thế hệ mặc định cho các chức năng có thể được tạo tự động với = default. Đó là cú pháp của nó.

Các vấn đề liên quan