На самом деле вы можете заставить new «возвращать» 0, используя std :: nothrow, но это только заставляет его возвращать 0, если выделение памяти не удается. Как только он попадет в ваш конструктор, вы не сможете получить то, что хотите.
Вы должны разделить проблемы в вашем классе. Конструктор почти никогда не должен (у меня возникает искушение сказать «никогда», но я оставляю место для редкого исключения, о котором я не могу думать) выполнять обработку файлов, если только обработка файлов не является его единственной ответственностью (например, fstream). *