Có tên nào để mô tả thành ngữ này không?
Trong UML nó được gọi là tập hợp. Nó khác với thành phần ở chỗ đối tượng thành viên không thuộc sở hữu của lớp giới thiệu. Trong C ++, bạn có thể thực hiện tổng hợp theo hai cách khác nhau, thông qua các tham chiếu hoặc con trỏ.
Tôi giả sử nó là để ngăn chặn chi phí có thể lớn của việc sao chép một đối tượng phức tạp lớn?
Không, đó sẽ là một lý do thực sự tồi tệ để sử dụng cái này. Lý do chính cho sự kết hợp là đối tượng được chứa không thuộc sở hữu của đối tượng chứa và do đó vòng đời của chúng không bị ràng buộc. Đặc biệt, thời gian tồn tại của đối tượng được tham chiếu phải lâu hơn đối tượng được giới thiệu. Nó có thể đã được tạo sớm hơn nhiều và có thể tồn tại đến cuối vòng đời của vùng chứa. Bên cạnh đó, trạng thái của đối tượng được tham chiếu không được kiểm soát bởi lớp, nhưng có thể thay đổi bên ngoài. Nếu tham chiếu không phải là tham chiếu const
, thì lớp có thể thay đổi trạng thái của một đối tượng nằm bên ngoài nó.
Đây có phải là thực hành tốt không? Có bất kỳ cạm bẫy nào đối với cách tiếp cận này không?
Nó là một công cụ thiết kế. Trong một số trường hợp, đó sẽ là một ý tưởng hay, trong một số trường hợp thì không. Cạm bẫy phổ biến nhất là thời gian tồn tại của đối tượng giữ tham chiếu không bao giờ được vượt quá thời gian tồn tại của đối tượng được tham chiếu. Nếu đối tượng bao quanh sử dụng tham chiếu sau khi đối tượng được tham chiếu bị hủy, bạn sẽ có hành vi không xác định. Nói chung tốt hơn là nên chọn bố cục hơn là tổng hợp, nhưng nếu bạn cần, nó cũng là một công cụ tốt như bất kỳ công cụ nào khác.