Я сталкиваюсь с правилом (раздел N3797::12.8/11 [class.copy]
)
Неявно объявленный конструктор копирования/перемещения является встроенным общедоступным член его класса. Конструктор копирования/перемещения по умолчанию для класса X определяется как удаленный (8.4.3), если X имеет:
[...]
- любой прямой или виртуальный базовый класс или нестатический член данных типа с деструктором, который удален или недоступен по умолчанию конструктор или
[...]
Но я не могу получить точку удалённого деструктора, появляющуюся в виртуальном или прямом базовом классе вообще. Рассмотрим следующий простой пример:
struct A
{
~A() = delete;
A(){ }
};
struct B : A
{
B(){ }; //error: use of deleted function 'A::~A()'
};
B b;
int main() { }
Мне это совершенно непонятно. Я определил конструктор 0-аргументов explcitly и не использует деструктор базового класса. Но компилятор думает иначе. Это не сработает, даже если мы явно определяем деструктор B
:
struct A
{
~A() = delete;
A(){ }
};
struct B : A
{
B(){ };
~B(){ };
};
//B b;
int main() {
}
Не могли бы вы прояснить эту вещь?