J'ai initialement posté cela comme une question uniquement sur les destructeurs, mais maintenant j'ajoute la considération du constructeur par défaut. Voici la question originale:
Si je veux donner à ma classe un destructeur qui est virtuel, mais qui est sinon le même que ce que le compilateur générerait, je peux utiliser
=default
:class Widget { public: virtual ~Widget() = default; };
Mais il semble que je puisse obtenir le même effet avec moins de frappe en utilisant une définition vide:
class Widget { public: virtual ~Widget() {} };
Y a-t-il une manière dont ces deux définitions se comportent différemment?
D'après les réponses publiées pour cette question, la situation du constructeur par défaut semble similaire. Étant donné qu'il n'y a presque aucune différence de signification entre " =default
" et " {}
" pour les destructeurs, n'y a-t-il pas de différence de signification similaire entre ces options pour les constructeurs par défaut? Autrement dit, en supposant que je veuille créer un type où les objets de ce type seront à la fois créés et détruits, pourquoi voudrais-je dire
Widget() = default;
au lieu de
Widget() {}
?
Je m'excuse si l'extension de cette question après sa publication d'origine enfreint certaines règles SO. Publier une question presque identique pour les constructeurs par défaut m'a semblé être l'option la moins souhaitable.
std::has_trivial_destructor<Widget>::value
va de même true
pour le premier, mais false
pour le second. Quelles sont les implications de cela, je ne sais pas non plus. :)
= default
est imo plus explicite, et est cohérent avec le support pour cela avec les constructeurs.