Zainspirowany postem Why does destructor disable generation of implicit move methods?, zastanawiałem się, czy to samo dotyczy domyślnego destruktora wirtualnego, np.Czy domyślny destruktor wirtualny uniemożliwia wykonywanie operacji przenoszenia generowanych przez kompilator?
class WidgetBase // Base class of all widgets
{
public:
virtual ~WidgetBase() = default;
// ...
};
jako klasa ma być klasą bazową hierarchii widget muszę zdefiniować swój wirtualny destruktor, aby uniknąć wycieków pamięci i niezdefiniowane zachowanie podczas pracy ze wskaźnikami klasy bazowej. Z drugiej strony nie chcę uniemożliwić kompilatorowi automatycznego generowania operacji przenoszenia.
Czy domyślny destruktor wirtualny uniemożliwia operacje przenoszenia generowane przez kompilator?