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
5
A
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
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
- 1. Thao tác Di chuyển/Sao chép Tệp trong Java
- 2. R: sao chép/di chuyển một môi trường khác
- 3. có thể di chuyển/sao chép xô s3 sang tài khoản khác không?
- 4. Sao chép Constructor trong Child nhưng không Chánh
- 5. Kéo/thả Qt: không thể di chuyển khi sao chép được bật (Ubuntu Gnome)
- 6. sao chép và chuyển nhượng
- 7. Sao chép NSString không sao chép?
- 8. Giao diện người dùng jQuery có thể sắp xếp: Di chuyển bản sao nhưng giữ nguyên
- 9. Kích hoạt URL neo nhưng không di chuyển đến nó?
- 10. không sao chép istringstream
- 11. . Thư viện Net để di chuyển/sao chép tệp trong khi vẫn giữ dấu thời gian
- 12. Sao chép hoặc di chuyển libs sau khi xây dựng với cmake
- 13. C++ 11: Di chuyển/Sao chép sự mơ hồ về xây dựng?
- 14. Sao chép khi di chuyển Cygwin từ máy này sang máy khác?
- 15. Khi di chuyển/sao chép các cá thể đối tượng C++
- 16. lý do đằng sau C++ ngầm sao chép và di chuyển constructor?
- 17. Làm thế nào để khởi tạo một chuỗi các đối tượng không thể di chuyển, không thể sao chép?
- 18. Yêu cầu sao chép/di chuyển đối với các loại khóa/giá trị trong std :: map?
- 19. Sự khác nhau giữa trong làm sao chép tập tin/xóa và di chuyển
- 20. Di chuyển từ Subversion sang git, sao chép tất cả các nhánh và đẩy qua gitolit?
- 21. Implicit constructor sao chép
- 22. Cách di chuyển nhanh nhất để sao chép một mảng trong C++
- 23. Tại sao memcpy không sao chép dữ liệu ma trận Eigen, nhưng std :: copy thành công?
- 24. Bảo vệ sao chép di sản thị trường Android
- 25. Sao chép chuyển đổi css3 với jquery
- 26. Sao chép máy chủ SQL không sao chép khóa ngoài
- 27. Maven không sao chép file phi java
- 28. Sao chép constructor không được gọi, nhưng trình biên dịch phàn nàn rằng không có
- 29. BCP không trả về lỗi nào, nhưng cũng không sao chép bất kỳ hàng nào
- 30. Hàng sao chép/sao chép Laravel4
Đó 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
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
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