2010-03-11 31 views
7

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?

+0

Vậy tại sao phương pháp Clone được sử dụng? – Jothi

+0

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) –

Trả lời

10

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.

+0

+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

2

Đ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ó.

+0

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

4

Đâ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.

1

nó rất tự nhiên vì không thể thay đổi giá trị của đối tượng bất biến.

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