Ваш класс может управлять ресурсами, которые не являются освобождены вызовом деструкторов членов данных объекта. Если это так, то код для выпуска ресурса принадлежит деструктору, который вы пишете.
Например, если вы выделяете объекты new
, они должны быть освобождены с помощью delete
. Если вы откроете файл с fopen
, он будет закрыт с fclose
. Если вы возьмете мьютекс Posix с pthread_mutex_lock
, он должен быть выпущен с pthread_mutex_unlock
.
Для каждого вида ресурсов, необходимых для освобождения вас (или кого-то еще), можно написать класс, который управляет и освобождает этот ресурс, и обеспечивает доступ к его основным операциям. Следовательно, существование таких классов, как std::unique_ptr
, std::shared_ptr
, std::lock_guard
, std::fstream
. Конечно, для простоты вам обычно нужен только один класс, который управляет определенным видом ресурсов.Итак, поскольку std::lock_guard
существует в C++ 11, единственная причина, по которой вы должны написать собственный класс для выпуска мьютекса, будет, если вы предоставляете альтернативный интерфейс для стандартного. Классы с нестандартными деструкторами в идеале должны быть редкими в вашем собственном коде - часто уже существуют классы, которые можно использовать в качестве элементов данных или автоматических переменных, а деструкторы которых выполняют эту работу.
Где это говорится * Использование деструктора не должно уничтожать членов * ?? –
Я думаю, что Q & A, с которым вы связаны, содержит примеры –
@AlokSave: в цитате говорится, что члены уничтожаются после выполнения (тела) деструктора. Я думаю, что это разумный вывод из этого, что цель (тела) деструктора не * уничтожить членов. Это также верно. –