Quy tắc ba là quy tắc ngón tay cái khi sử dụng C ++. Đây là một loại quy tắc thực hành tốt nói rằng Nếu lớp của bạn cần bất kỳ
- một phương thức tạo bản sao,
- một toán tử gán,
- hoặc một trình hủy,
được xác định một cách rõ ràng, thì có khả năng cần cả ba thứ đó.
Tại sao thế này? Đó là bởi vì, nếu lớp của bạn yêu cầu bất kỳ điều nào ở trên, thì nó đang quản lý các tài nguyên được phân bổ động và có thể sẽ cần lớp kia để đạt được điều đó thành công. Ví dụ:nếu bạn yêu cầu toán tử gán, bạn sẽ tạo bản sao của các đối tượng hiện đang được sao chép bằng tham chiếu, do đó phân bổ tài nguyên. Bạn sẽ cần hàm tạo bản sao để sao chép và trình hủy để giải phóng các tài nguyên này.
1. sao chép hàm tạo - Trình tạo bản sao do trình biên dịch cung cấp tạo bản sao thông minh cho thành viên của tất cả các thuộc tính của Trình quản lý Foo. Điều này đặt ra các vấn đề tương tự như toán tử gán.
2. toán tử gán - Nếu bạn không cung cấp, trình biên dịch sẽ tạo một toán tử gán mặc định. Hoạt động gán mặc định là một chức năng sao chép khôn ngoan của thành viên và thực hiện một bản sao nông chứ không phải một bản sao sâu. Điều này có thể gây ra các vấn đề như rò rỉ bộ nhớ, gán sai.
3. bộ hủy - Khi người quản lý này vượt ra ngoài phạm vi, nó sẽ giải phóng tất cả các tài nguyên mà nó đang quản lý.