Сделайте так, чтобы каждый из ваших классов реализовал деструктор, который выполняет всю очистку / деинициализацию, необходимую для этого класса.
Создайте экземпляр класса и оберните его в boost::shared_ptr
.
Затем передайте копии этого каждой функции, которой нужен доступ к экземпляру.
А интеллектуальный указатель гарантирует, что после того, как объект больше не используется (когда все общие указатели были уничтожены), объект, на который они указывают, уничтожается. его деструктор запускается, и вся очистка выполняется.
Как всегда в C ++, используйте RAII, когда это возможно.
Когда у вас есть код, такой как x.reset()
или disconnect(x)
, первое, что вы должны сделать, это спросить себя: «Разве это не относится к деструктору?»
Далее, всякий раз, когда вы используете x->y()
, вы должны спросить себя:
- Почему это указатель? Не могу ли я обойтись одним экземпляром, размещенным в стеке, и, возможно, несколькими ссылками на него?
- Если это должен быть указатель, почему это не умный указатель?