мне было интересно, если параметризованный конструктор должен всегда есть только параметры, которые фактически инициализируют атрибуты класса. Например, при звонке:
Texture background("C:\Documents\Images\background.png");
Что делать, если мне не нужно хранить путь к файлу?
Конструктор объекта принимает любые параметры, необходимые для возврата действительный и функциональный объект. Вы можете разрешить конструкторам дополнительные параметры для синтаксического сахара, но, по крайней мере, ваш объект должен быть допустимым. В вашем случае, я не думаю, что текстура имеет смысл без файла, используемого в качестве текстуры, поэтому я думаю, что удаление этого параметра не рекомендуется.
Имейте в виду, однако, что вы также должны стремиться сделать свой код простым для тестирования. В этом случае сложные конструкторы могут быть проблемой, когда вы хотите создать экземпляр объекта для тестирования определенных методов. В конце концов, это больше процесс принятия решений.
Если вам не нужно хранить путь, не передавайте его конструктору! 🙂
Параметризованные конструкторы предназначены для обеспечения доступности всей информации при создании объекта. Так что передавайте только ту информацию, которая необходима.
Если вы хотите следовать идиоме RAII, тогда передайте все требуемые ресурсы конструктору и освободите ресурсы (если объект блокирует их, например, файл или порт).
Я не думаю, что есть что-то не так с принятием параметра, который не хранится непосредственно в классе. Очевидно, что если это вообще не влияет на класс, то это просто пустая трата времени, но вы можете принять что-то вроде семени PRNG, которое вы используете, чтобы заполнить свой класс случайным состоянием, и у вас нет никаких причин удерживать семя после этого. точка.
Однако передача пути к файлу, к которому вы имеете в виду доступ в конструкторе, опасна, поскольку в ходе этого процесса может возникнуть любое количество проблем. Вы действительно не хотите подобных неприятностей в своем конструкторе.
Во избежание возможных сбоев в вашем конструкторе вы заканчиваете откладывать такие вещи, как доступ к файлу, до окончания строительства. Следовательно, конструктору действительно не нужна информация, потому что имеет больше смысла передавать ее методу, который вы используете для доступа к файлу, где вы можете легче обрабатывать ошибки.