Множественное наследование - одна из причин, по которой вы не наследуете конструкторы. Конструкторы копирования не являются особенными в этом отношении.
struct B1 {
virtual ~B1() {}
B1(int a);
};
struct B2 {
virtual ~B2() {}
B2(int a);
};
struct D : public B1, public B2 {
};
Не ясно, какой из них подойдет в этом случае.
Лично я считаю, что цель реализации более ясна, если не унаследовать их, хотя, возможно, это не является причиной, о которой говорил бы разработчик языка.
Вы можете и всегда должны определять виртуальный деструктор, если вы намерены наследовать от него.
class A {
public:
virtual ~A() {cout << "DTOR of A" << endl;
};
Без виртуального у вас будет утечка памяти.
Как отмечалось другими, операторы присваивания будут наследоваться. У меня есть скрытое подозрение, что полезность унаследованного оператора присваивания будет ограничена.
Edit:
При дальнейшем чтении не виртуальный деструктор фактически не определено. На практике это просто проявляется как утечка памяти.