Quy tắc năm áp dụng trong C++ cho quản lý tài nguyên. Quản lý tài nguyên giải phóng client khỏi lo lắng về vòng đời đối tượng, loại bỏ rò rỉ bộ nhớ và vấn đề khác. Nhưng quản lý này có chi phí. Quy tắc "Big Five" nói: nếu bạn phải viết một trong các hàm sau thì phải có chính sách cho tất cả chúng.
Nếu có đối tượng Foo, ta có FooManager quản lý tài nguyên Foo. Khi triển khai FooManager, bạn sẽ cần các hàm sau:
Destructor – Khi manager ra khỏi phạm vi, phải giải phóng tất cả tài nguyên đang quản lý.
Toán tử gán (assignment operator) – Nếu không cung cấp, trình biên dịch tạo mặc định (shallow copy). Gây rò rỉ bộ nhớ, gán sai.
Copy constructor – Compiler-supplied làm shallow copy, gây vấn đề tương tự toán tử gán.
Move constructor – Sao chép tốn kém (tạo, copy, hủy temp). C++11 giới thiệu r-value reference. R-value reference gắn với r-value (đối tượng vô danh/tạm). Dùng trong constructor để tạo tham chiếu đến r-value truyền vào.
Move assignment operator – Hữu ích khi chỉ muốn một tài nguyên tại một thời điểm. Sở hữu tài nguyên chuyển từ manager này sang manager khác.
Tài nguyên học Rule of Five: https://www.feabhas.com/sites/default/files/2016-06/Rule%20of%20the%20Big%20Five.pdf