Um destruidor virtual padrão impede operações de movimentação geradas pelo compilador?
Inspirado no postPor que o destruidor desativa a geração de métodos de movimentação implícitos?, Fiquei pensando se o mesmo se aplica ao destruidor virtual padrão, por exemplo.
class WidgetBase // Base class of all widgets
{
public:
virtual ~WidgetBase() = default;
// ...
};
Como a classe pretende ser uma classe base de uma hierarquia de widgets, tenho que definir seu destruidor virtual para evitar vazamentos de memória e comportamento indefinido ao trabalhar com ponteiros de classe base. Por outro lado, não quero impedir que o compilador gere automaticamente operações de movimentação.
Um destruidor virtual padrão impede operações de movimentação geradas pelo compilador?