Что делает деструктор объекта по умолчанию
Он вызывает деструкторы, если таковые имеются, для членов данных объекта.
что потребовало бы, чтобы мы вызвали его перед освобождением выделенной памяти для объекта?
ЕДИНСТВЕННЫЙ раз, когда деструктор должен когда-либо вызываться явно , это когда объект был построен с использованием placement-new
внутри существующего блока памяти. Использование placement-new
отделяет задачи построения / разрушения объекта от выделения / освобождения памяти, поэтому вам нужно явно создавать и уничтожать объект, но вам не нужно выделять / освобождать его блок памяти, вы можете управлять этим так, как хотите в другом месте.
Если вы не используете placement-new
для создания объекта, а вместо этого выделяете + конструируете объект, используя new
, тогда вы должны уничтожить + освободить объект, используя delete
(и вы должны предпочтительно использовать умный указатель , std:unique_ptr
или std::shared_ptr
, чтобы справиться с этим для вас).
Если вы не строите объект с использованием какой-либо формы new
, то НЕ пытайтесь вообще уничтожить объект вручную. Объект находится в автоматическом хранилище , и компилятор будет управлять им за вас.