Это безопасно, но вы должны рассмотреть возможность предоставления общедоступного виртуального деструктора в нуле или не виртуального защищенного деструктора в зависимости от того, хотите ли вы иметь возможность удалять объекты, полученные из нуля, через базовый указатель.
Мало того, что это безопасно, но это одна из основных причин наследования и полиморфизма: ваш нулевой класс предоставляет интерфейс, который применим к любому типу, который его реализует, независимо от того, какие дополнительные данные они хранят и какие дополнительные функции они предоставляют.Через этот общий интерфейс можно получить доступ и сохранить это множество типов, реализующих ноль , через этот общий интерфейс, который описывает общие аспекты всех из них.В этом суть полиморфизма (как статического, так и динамического) и очень полезного средства сокращения избыточного кода, работающего между связанными типами.