Нет, ты не должен явно вызывать деструкторы объектов-членов. Компилятор делает это за тебя автоматически.
Когда вызывается деструктор класса, деструкторы всех объектов-членов вызываются автоматически компилятором. Это происходит независимо от того, определил ты явно деструктор в своём классе или нет. Деструкторы членов вызываются в обратном порядке их объявления в классе.
Посмотри на такую структуру класса:
class Member {
public:
~Member();
};
class Fred {
public:
~Fred();
private:
Member x_;
Member y_;
Member z_;
};
Когда выполняется Fred::~Fred(), компилятор автоматически вызывает:
z_.~Member() (объявлен последним)y_.~Member() (объявлен вторым)x_.~Member() (объявлен первым)Ты не должен писать эти вызовы вручную в реализации деструктора.
Единственное исключение из этого правила — когда ты используешь placement new, где ты должен явно вызвать деструкторы, потому что память была выделена не через стандартный оператор new.
Полагайся на автоматическое уничтожение членов компилятором. Это гарантирует правильный порядок очистки и предотвращает типичные ошибки при ручном управлении вызовами деструкторов.
Деструкторы объектов-членов автоматически вызываются компилятором в том же порядке, в котором переменные-члены объявлены в определении класса.
Новый — ещё не проверен сообществом
Вы