Ban đầu tôi chỉ đăng bài này dưới dạng câu hỏi về các hàm hủy, nhưng bây giờ tôi đang xem xét thêm về hàm tạo mặc định. Đây là câu hỏi ban đầu:
Nếu tôi muốn cung cấp cho lớp của mình một hàm hủy là ảo, nhưng khác với những gì trình biên dịch sẽ tạo ra, tôi có thể sử dụng
=default
:class Widget { public: virtual ~Widget() = default; };
Nhưng dường như tôi có thể có được hiệu ứng tương tự với việc gõ ít hơn bằng cách sử dụng một định nghĩa trống:
class Widget { public: virtual ~Widget() {} };
Có cách nào để hai định nghĩa này hành xử khác nhau không?
Dựa trên các câu trả lời được đăng cho câu hỏi này, tình huống cho hàm tạo mặc định có vẻ tương tự. Cho rằng hầu như không có sự khác biệt về ý nghĩa giữa " =default
" và " {}
" đối với các hàm hủy, có giống nhau gần như không có sự khác biệt về ý nghĩa giữa các tùy chọn này đối với các hàm tạo mặc định không? Đó là, giả sử tôi muốn tạo một loại trong đó các đối tượng của loại đó sẽ được tạo và hủy, tại sao tôi muốn nói
Widget() = default;
thay vì
Widget() {}
?
Tôi xin lỗi nếu mở rộng câu hỏi này sau khi bài đăng ban đầu của nó vi phạm một số quy tắc SO. Đăng một câu hỏi gần như giống hệt nhau cho các nhà xây dựng mặc định đánh tôi là tùy chọn ít mong muốn hơn.
std::has_trivial_destructor<Widget>::value
là true
cho thứ nhất, nhưng false
cho thứ hai. Ý nghĩa của việc đó là gì tôi cũng không biết. :)
= default
imo rõ ràng hơn, và phù hợp với sự hỗ trợ cho nó với các nhà xây dựng.