Это выглядит как плохое использование объектно-ориентированного дизайна.
Если вы создаете другой экземпляр в зависимости от переменной типа, то почему у вас нет подклассов для этих типов?
Было бы намного понятнее определить базовый класс со всеми общими функциями и подкласс для каждого варианта типа.
Что делает класс? Возможно, мы сможем указать вам правильное направление.
С точки зрения кода, ваш пример кода верен, но обычно это плохая практика - заменять экземпляр другим экземпляром. Если только метод init не является фабричным методом, повторно использующим экземпляры или одноэлементный инициализатор, избегайте освобождения себя вместо другого экземпляра.