Tại sao các nhà xây dựng sao chép không cần thiết cho các đối tượng không thay đổi? Xin giải thích điều này cho tôi.Tại sao các nhà xây dựng sao chép không cần thiết cho các đối tượng bất biến?
Trả lời
Vì giá trị không thể thay đổi, nên mỗi bit đều tốt để tham chiếu cùng một đối tượng trong mọi trường hợp, không cần phải có thêm "bản sao bổ sung" để nói.
+1 không có điểm nào trong việc có hai trường hợp đối tượng bất biến bằng nhau - chỉ cần sử dụng cùng một trường hợp ở khắp mọi nơi. – Grundlefleck
Điều này hơi phụ thuộc vào ngôn ngữ:
Tuy nhiên, nhiều ngôn ngữ yêu cầu người tạo bản sao. Nếu bạn không cung cấp, ngôn ngữ sẽ ngầm tạo ra một ngôn ngữ. Tuy nhiên,
Với đối tượng không thay đổi, điều này thường tốt, vì hàm tạo bản sao mặc định (thường) làm bản sao nông của tất cả các giá trị. Với một kiểu dữ liệu có thể thay đổi (ví dụ: chứa tham chiếu đối tượng nội bộ cho các đối tượng khác), sao chép nông thường là một sự lựa chọn kém, vì bản sao chỉ sao chép tham chiếu/con trỏ được đóng gói bên trong nó.
Việc sao chép các đối tượng bất biến không phải là tối ưu - nó không cần thiết sử dụng các tài nguyên bổ sung. Điều này có thể hoặc có thể không gây ra một vấn đề tùy thuộc vào tình hình, nhưng việc sao chép các đối tượng bất biến sẽ không được khuyến khích nói chung. – Grundlefleck
Đây là câu hỏi phụ thuộc vào ngôn ngữ, đặc biệt là về tuổi thọ. Trong một khoảnh khắc, hãy quên đi những điều đó.
Sao chép trình xây dựng có giá trị ở chỗ chúng cho phép bạn lấy một đối tượng và tạo một bản sao hoàn toàn độc lập của nó. Điều này là có giá trị trong đó bạn có thể sửa đổi đối tượng thứ hai độc lập đầu tiên. Hoặc một thành phần có thể tạo một bản sao riêng để bảo vệ bản thân khỏi các thành phần khác đang thay đổi đối tượng ra khỏi nó.
Đối tượng không thể thay đổi là không thể thay đổi. Không có giá trị trong việc tạo ra một bản sao của một đối tượng mà sẽ không thay đổi.
Bây giờ, hãy cho phép mọi thứ về cuộc sống một lần nữa. Trong các ngôn ngữ như C++ sao chép các nhà xây dựng cũng cho phép bạn làm việc xung quanh vấn đề bộ nhớ/đời. Ví dụ: nếu tôi đang viết một API có số SomeType*
và tôi muốn giữ nó dài hơn thời gian tồn tại của phương pháp của tôi. Trong C++, cách đáng tin cậy nhất để làm điều này là tạo một bản sao của đối tượng thông qua một hàm tạo bản sao.
nó rất tự nhiên vì không thể thay đổi giá trị của đối tượng bất biến.
- 1. C++: Phân bổ lại vector tự động gọi các nhà xây dựng sao chép? Tại sao?
- 2. Sao chép Constructor Cần thiết với đối tượng tạm thời
- 3. Tại sao các đối tượng ký tự HTML cần thiết?
- 4. Có thể ném đối tượng với các nhà xây dựng bản sao riêng tư không?
- 5. Tại sao lại sử dụng các tác dụng phụ xấu trong các nhà xây dựng JavaScript?
- 6. Tại sao bản sao khởi tạo theo cách đó? Tại sao yêu cầu các nhà xây dựng bản sao?
- 7. Tại sao Xcode sao chép tài nguyên không thay đổi khi xây dựng một thiết bị?
- 8. Nhà xây dựng bản sao Weird
- 9. Biến đối số nhà xây dựng vào các instance variable
- 10. Tại sao không có cuộc gọi đến nhà xây dựng?
- 11. Một mẫu thiết kế cho các nhà xây dựng
- 12. Tại sao di chuyển-nhà xây dựng không được gọi?
- 13. Xác định các nhà xây dựng sao chép nào được gọi trong mã C++
- 14. Tại sao linq-2-sql lại tạo thêm các đối tượng không cần thiết?
- 15. Thừa kế bản sao của nhà xây dựng
- 16. Tại sao từ khóa mới không cần thiết cho Chuỗi
- 17. tại sao cần phải chuyển đổi loại thành mảng Đối tượng trong Xây dựng của ArrayList?
- 18. OpenMP với MSVC 2010 Debug xây dựng lỗi lạ khi đối tượng được sao chép
- 19. Tại sao các loại không có nhà xây dựng dữ liệu hợp lệ?
- 20. Trong đó trường hợp là các nhà xây dựng bản sao gọi là, nếu một container được sao chép
- 21. Tránh sao chép lát không cần thiết trong Python
- 22. NSArray có sao chép các đối tượng không?
- 23. init boost :: tùy chọn đối tượng không thể sao chép
- 24. Tạo các đối tượng bất biến từ javabean
- 25. Chạy các kiểm tra JUnit trong Maven mà không cần xây dựng và sao chép các tệp
- 26. Hibernate CompositeUserType cho đối tượng bất biến
- 27. Tại sao chúng ta cần các nhà thầu tĩnh?
- 28. Tại sao không hỗ trợ C# ngụ ý các loại chung trên các nhà xây dựng lớp?
- 29. C++ sao chép đối tượng luồng
- 30. Mongoose - liên kết các đối tượng với nhau mà không cần sao chép
Vậy tại sao phương pháp Clone được sử dụng? – Jothi
Bản sao có thể có của [Điều gì làm cho các đối tượng bất biến được xuất bản mà không có kỹ thuật xuất bản an toàn?] (Http://stackoverflow.com/questions/17000617/what-makes-immutable-objects-to-be-published-without-safe-publication -kỹ thuật) –