Да, он вызовет все дочерние деструкторы, поэтому он будет работать так, как вы ожидаете.
В конце концов, деструктор - это просто функция, так получилось, что он вызывается, когда объекты удаляются .
Поэтому, если вы используете этот подход, будьте осторожны с этим:
#include <iostream>
class A
{
public:
A(){};
~A()
{
std::cout << "OMG" << std::endl;
}
};
int main()
{
A* a = new A;
a->~A();
delete a;
return 0;
}
output:
OMG
OMG
Деструктор вызывается второй раз, когда на объекте фактически вызывается delete, поэтому, если вы удаляете указатели в своем деструкторе, убедитесь, что вы установили их в 0, так что во время вызова деструктора ничего не произойдет (поскольку удаление нулевого указателя ничего не делает).