Обычный контракт в ОО заключается в том, что методы объекта действительно работают.
Так что, как следствие, никогда не возвращать объект-зомби из конструктора / init.
Зомби не работает и может отсутствовать внутренние компоненты. Просто исключение нулевого указателя, ожидающее выполнения.
Я впервые сделал зомби в Objective C много лет назад.
Как и все эмпирические правила, существует «исключение».
Вполне возможно, что специальный интерфейс может иметь контракт, в котором говорится, что
существует метод "initialize", которому разрешено выполнять исключение.
То, что объект, дополняющий этот интерфейс, может не отвечать правильно ни на какие вызовы, кроме установщиков свойств, пока не будет вызвана инициализация. Я использовал это для драйверов устройств в операционной системе OO во время загрузки, и это работало.
В общем, вам не нужны объекты-зомби. В таких языках, как Smalltalk с становится , все становится немного шипучим, но чрезмерное использование становиться тоже плохой стиль. Become позволяет объекту превращаться в другой объект на месте, поэтому нет необходимости в оболочке-оболочке (Advanced C ++) или шаблоне стратегии (GOF).