Tôi thường thấy mình viết các hàm tạo di chuyển tẻ nhạt cho các lớp có nhiều biến thành viên. Chúng trông giống như sau:Ủy quyền cho hàm tạo di chuyển mặc định
A(A && rhs) :
a(std::move(rhs.a)),
b(std::move(rhs.b)),
c(std::move(rhs.c)),
d(std::move(rhs.d)) {
some_extra_work();
}
Tức là, chúng thực hiện tất cả các hành động liên quan đến hàm tạo mặc định, sau đó tạo một số nhiệm vụ thừa. Lý tưởng nhất là tôi sẽ ủy nhiệm cho constructor di chuyển mặc định sau đó thực hiện thêm công việc, tuy nhiên hành động định nghĩa constructor di chuyển của riêng tôi ngăn cản việc thực hiện mặc định không được định nghĩa, nghĩa là không có gì để ủy nhiệm.
Có cách nào tốt đẹp để giải quyết vấn đề chống mẫu này không?
Khó để nói về mức độ trừu tượng như vậy, nhưng có lẽ bạn có thể tách 'A' thành hai lớp và đặt một thành khác? Một sẽ có tất cả các hàm tạo mặc định và một hàm khác sẽ làm 'some_extra_work'. Kiểm tra * Quy tắc không *. – zch
Không chắc chắn nếu điều này được áp dụng, nhưng sẽ giống như 'A (A & & nbsp; rhs, int): A (rhs) {} 'không hoạt động? – Damon
Một lớp cơ sở trung gian với một hàm khởi tạo mặc định có thể hữu ích. –