2011-01-22 34 views

Trả lời

12

Nói chung, bạn sẽ cần xác định toán tử gán của riêng mình trong cùng một trường hợp khi bạn cần xác định hàm tạo bản sao của riêng mình - tức là khi bản sao mặc định sẽ không cắt nó. Điều này xảy ra trong trường hợp đối tượng của bạn quản lý bộ nhớ được cấp phát động hoặc các tài nguyên khác cần được sao chép đặc biệt.

Ví dụ: nếu bạn có lớp quản lý con trỏ trỏ tới bộ nhớ được cấp phát động, toán tử gán mặc định sẽ chỉ sao chép con trỏ . Nói chung, đây không phải là thứ bạn muốn - bạn muốn mỗi cá thể đối tượng có bản sao nội bộ của dữ liệu được phân bổ, và vì vậy bạn sẽ cần một toán tử gán đặc biệt phân bổ bộ nhớ của riêng nó và thực hiện một bản sao. Đây là ví dụ, những gì std::vector cần làm khi sao chép hoặc gán.

+0

Có, quản lý bộ nhớ động là phỏng đoán của tôi. – user963241

+3

@cpx: Trên thực tế, nó tổng quát hơn một chút: quản lý bất kỳ loại tài nguyên nào mà nhà xây dựng mặc định sẽ không làm đúng hoặc không có sẵn. Điều đó bao gồm bộ nhớ được lưu giữ bởi con trỏ, nhưng cũng có bất kỳ tài nguyên nào khác như ví dụ: 'mutex' –

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