я сталкиваюсь правилу (раздел N3797::12.8/11 [class.copy]
)Какой смысл удалить деструктор?
Для неявно объявленных копировать/перемещать конструктор инлайн общественного члена своего класса. Дефолте конструктор копирования/перемещения для класса X определяется как удаленные (8.4.3), если X имеет:
[...]
- любой прямой или виртуальный базовый класс или не статический член данных типа с деструктора, который является удален или недоступен из дефолте конструктора или
[...]
Но я не могу получить точку удаляемого г estructor, появляющийся в виртуальном или прямом базовом классе вообще. Рассмотрим следующий простой пример:
struct A
{
~A() = delete;
A(){ }
};
struct B : A
{
B(){ }; //error: use of deleted function 'A::~A()'
};
B b;
int main() { }
Это совершенно неясно мне. Я определил конструктор 0-аргументов explcitly и не использует деструктор базового класса. Но компилятор думает иначе. Это не будет работать, даже если мы определим деструктор B
«s явно:
struct A
{
~A() = delete;
A(){ }
};
struct B : A
{
B(){ };
~B(){ };
};
//B b;
int main() {
}
Не могли бы вы уточнить, что вещь?
Связанный: [Как = удаление на деструктор предотвращает выделение?] (Http://stackoverflow.com/questions/18847739/how-does-delete-on-destructor-prevents-allocation) – Nawaz
@RaphaelM. Да, переменные со статическим временем хранения будут уничтожены после возврата из основной функции. Ясно. Так в чем смысл таких деструкторов? –
@Nawaz Но в моем втором примере я никогда не выделяю переменную. –