Может быть, что-то сказать о внедрении зависимости. Вместо создания объекта (в данном случае int, но в непонятном случае, скорее всего, пользовательского типа) в его конструкторе, объект передается в качестве параметра конструктору. Если объект создается позже, то фабрика передается в конструктор X.
Затем, когда вы выполняете модульное тестирование, вы передаете фиктивный объект (или фиктивную фабрику, которая создает фиктивные объекты), и деструктор записывает факт, что он был вызван. Тест не пройден, если это не так.
Конечно, вы не можете смоделировать (или иным образом заменить) встроенный тип, поэтому в данном конкретном случае это бесполезно, но если вы определите объект / фабрику с помощью интерфейса, тогда вы можете.
Проверка на утечки памяти в модульных тестах часто может быть выполнена на более высоком уровне, как говорили другие. Но это только проверяет, что был вызван деструктор a , но это не доказывает, что был вызван деструктор right . Так что это не будет, например. поймать отсутствующее «виртуальное» объявление в деструкторе типа члена x (опять же, не имеет значения, если это просто int).