2011-01-01 31 views
5

Trong C++ 0x, liệu pháp lý/mong đợi rằng một số lớp có thể được sao chép nhưng không được di chuyển? Tôi đang xem xét việc triển khai một lớp không đồng nhất thay đổi kích thước và tôi không chắc mình có thể xử lý nó nếu một số lớp cần sao chép và một số cần thiết di chuyển.Sao chép nhưng không di chuyển

Trả lời

5

Có, đó là pháp lý cho một lớp học để được copyable nhưng không di chuyển:

class MyClass { 
public: 
    /* Copyable... */ 
    MyClass(const MyClass&); 
    MyClass& operator= (const MyClass&); 

    /* ... but not movable. */ 
    MyClass(MyClass&&) = delete; 
    MyClass& operator= (MyClass&&) = delete; 
}; 

Tuy nhiên, tôi không thể nghĩ ra một lý do chính đáng là tại sao mọi người sẽ muốn làm điều này. Biết lập trình C++ (như tôi) mặc dù, tôi nghĩ rằng bạn nên dự đoán rằng điều này có thể xuất hiện.

Ngoài sự tò mò, bạn dựa vào mã nào sẽ phá vỡ nếu một lớp có thể sao chép được nhưng không thể di chuyển được?

+0

Đó là một ngăn xếp không đồng nhất thay đổi kích thước. Tôi đoán nếu tôi muốn tương thích C++ 03 với nỗ lực tối thiểu, tôi nên cho phép cả hai. – Puppy

+1

Hmm ... những gì cụ thể là trong đoạn mã mà bị hỏng với các đối tượng có thể sao chép, bất động (tôi đoán đó là một thuật ngữ hợp lý cho nó?)? Tôi tò mò vì tôi chưa bao giờ gặp chuyện này trước đây. – templatetypedef

+0

Thật là một điều tốt khi bạn nói vậy. Vì lý do nào đó, tôi đã nhớ rằng các vật thể được chuyển từ không cần phải phá hủy. Rất tiếc. – Puppy

0

Tôi khá chắc chắn rằng làm cho nhà xây dựng di chuyển được bảo vệ/riêng tư là một cách hạn chế khả năng di chuyển đối tượng của lớp đó. Nếu bạn có thể mong đợi điều đó trong một mẫu? Tôi không nghĩ vậy. Bạn cần std::enable_if cho loại séc đó.

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